![]() |
Wort alleine im String finden
Hallo,
ich stehe gerade auf dem Schlauch. Beispiel: ich habe folgenden String:
Delphi-Quellcode:
und ich möchte nun in diesem String das "and" finden und markieren.
'Ein Text mit and und auch mit b_and und so'
Momentan mach ich es so, dass ich nach der Position von "and" suche, mir das Zeichen zuvor und danach anschaue, diese mit "erlaubten" Zeichen vergleiche und dann das Wort markiere. Gibt es eine Funktion, die das eleganter macht, also das Wort sucht und zwar alleine stehend? |
AW: Wort alleine im String finden
Eventuell mit einem regulären Ausdruck, dann kannst Du die davor und danach erlaubten Zeichen gleich mit in den einen Suchaufruf verpacken? Findest Du in der RTL-Unit RegularExpressions.pas.
|
AW: Wort alleine im String finden
RegEx ?
Damit kann man auch Ausschließungen und/oder Wortgrezen in die Suchmaske mit aufnehmen. [edit] CCRDude war schonwieder schneller als die faule RedBox |
AW: Wort alleine im String finden
Dummerweise kommen mir meist die Einfälle wenn ich auf den Button "Thema erstellen" drücke :-)
Ich beweg mich im RichEdit und da kann ich RichEdit.FindText verwenden und da kann man nach ganzen Wörtern suchen lassen |
AW: Wort alleine im String finden
Wenn ich mich nicht verdacht hab und für ohne RichEdit...
Delphi-Quellcode:
uses
StrUtils, Character; type TPosExMode = set of (pemCaseInsensitive, pemWholeWord); function PosEx2(SubStr, S: string; Offset: Integer = 1; SerarchMode: TPosExMode = []): Integer; overload; function PosEx2(SubStr, S: AnsiString; Offset: Integer = 1; SerarchMode: TPosExMode = []): Integer; overload; function PosEx2(SubStr, S: string; Offset: Integer; SerarchMode: TPosExMode): Integer; begin if pemCaseInsensitive in SerarchMode then begin SubStr := AnsiUpperCase(SubStr); S := AnsiUpperCase(S); end; Result := Offset - 1; repeat Result := PosEx(SubStr, S, Result + 1); until (Result = 0) or not (pemWholeWord in SerarchMode) or (((Result = 0) or not IsLetterOrDigit(S[Result - 1])) and ((Result + Length(SubStr) > Length(S)) or not IsLetterOrDigit(S[Result + Length(SubStr)]))); end; function PosEx2(SubStr, S: AnsiString; Offset: Integer; SerarchMode: TPosExMode): Integer; const WordChars: TSysCharSet = ['a'..'z', 'A'..'Z', '0'..'9']; begin if pemCaseInsensitive in SerarchMode then begin SubStr := AnsiUpperCase(SubStr); S := AnsiUpperCase(S); end; Result := Offset - 1; repeat Result := PosEx(SubStr, S, Result + 1); until (Result = 0) or not (pemWholeWord in SerarchMode) or (((Result = 0) or not (S[Result - 1] in WordChars)) and ((Result + Length(SubStr) > Length(S)) or not (S[Result + Length(SubStr)] in WordChars))); end; // Beitrag zitieren und dort den Code rauskopieren ... hier ist die Codeformatierung häßlich. Beim RichEdit pass aber auf, daß FindText den Index für SelStart, SelLength und RichEdit.Text liefert. Zu RichEdit.Lines.Text paßt dieser Index nicht mehr, daß RichEdit neuerdings einen anderen Zeilenumbruch verwendet. (die Mac #13) |
AW: Wort alleine im String finden
In den StrUtils gibt es eine Funktion dafür: ExtractWords oder so.
|
AW: Wort alleine im String finden
|
AW: Wort alleine im String finden
Also ich hab nur soWholeWord gesehen, aber was bitte wird als Worttrenner benutzt?
Neben Blank CarriageReturn Linefeed Tab ... ?? Gruß K-H |
AW: Wort alleine im String finden
Meistens werden Grenzen zwischen einem "Zeichen welcher ein Buchstabe oder eine Ziffer darstellt" und einem "Zeichen welches etwas Anderes darstellt" als Trennlinie verwendet.
Darum auch
Delphi-Quellcode:
>
not IsLetterOrDigit
![]() Also Satzzeichen, Leerzeichen, Steuerzeichen, mathematische Zeichen, Symbole usw. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz