![]() |
RegEx positive look-behind
Hi,
ich benutze die TRegExpr Klasse von Andrey Sorokin. Nun möchte ich in eine Text alle großen "I" Buchstaben gegen ein kleines "l" ersetzen, aber nur wenn das große "I" nicht am Anfang des Wortes steht. Jedoch bekomme ich eine Fehlermeldung: "TRegExpr(comp): Urecognized Modifier". Kann es sein das diese Klasse kein "positive look-behind" unterstützt?
Delphi-Quellcode:
Mit diesem Online-Tester klappt es:
function SpecialL(AText: string): string;
begin result := AText; with TRegExpr.Create do try result := ReplaceRegExpr('(?<=[\S])I', AText, 'l', True); finally Free; end; end; ![]() Alternative könnte man sowas machen, aber vielleicht mache ich ja was an der Systax falsch:
Delphi-Quellcode:
function SpecialL(AText: string): string;
var Offset: Integer; begin result := AText; Offset := Pos('I', AText); while not(Offset = 0) do begin if (Offset > 1) and (AText[Offset - 1] in ['A' .. 'Z', 'a' .. 'z']) then AText[Offset] := 'l'; Offset := PosEx('I', AText, Offset + 1); end; result := AText; end; |
Re: RegEx positive look-behind
Habe gerade das gleiche Problem und die gleiche Frage:
Zitat:
|
Re: RegEx positive look-behind
Notfalls einfach
Delphi-Quellcode:
Nur wenn der erste Buchstabe in AText ein I wäre, würde es das nicht ersetzen, aber dort wäre es vermutlich eh ein Wortanfang.
result := ReplaceRegExpr('\SI', AText, '$1i', True);
Ach ja, II würde so auch nicht vollständig ersetzt. Zitat:
Hast du die Delimiter richtig gesetzt und sicher daß du keinen ungültigen/unbekannten Modifier angegeben hast? (hatte leider noch keine Zeit meine RegEx-Klasse fertigzustellen, aber diese kann sowas ... allerdings nur für D2006+ ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 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 by Thomas Breitkreuz