![]() |
String nach Muster durchsuchen
Hallo,
ich will große Textmengen nach bestimmten Mustern durchsuchen. Diese Muster kommen allerdings mehrmals vor. Aufbau: FesterTeil|VeränderlicherTeil|FesterTeil Wie durchsuch ich nun die Textdatei bzw. den String am effektivsten nach diesen Mustern? Mit copy+ansipos ist es ziemlich mühsam. Gibt es eine andere Möglichkeit bzw. sogar eine eigene Unit? Danke |
Re: String nach Muster durchsuchen
[dp]Reguläre Ausdrücke[/dp]
|
Re: String nach Muster durchsuchen
Ich glaub Reguläre Ausdrücke wären in dem Fall fast Overkill. Was er will, ist wenn ich richtig Verstanden habe, eine simple
![]() [offtopic]Ich hoffe übrigens Du willst mit der Funktion nicht in einer in einem String eingelesenen Executable suchen ... und ja das ist ein Seitenhieb weil ich da immer noch nicht drauf klar komm :P.[/offtopic] |
Re: String nach Muster durchsuchen
im Notfall könnte man auch einfach PosEx+Copy nutzen :angel:
|
Re: String nach Muster durchsuchen
Zitat:
|
Re: String nach Muster durchsuchen
@mkinzler Ich werde mich mal in RegEx einlesen, scheint ja ein recht umfangreichen, kompliziertes Thema zu sein. Danke.
@0xF30FC7 Nein ich will keine Dateistrings durchsuchen ;) In dem Thread habe ich leider nur Möglichkeiten gefunden, ob dieser String existiert, ich suche aber etwas das mir die Position bzw. gleich den ganzen String zurückgibt. |
Re: String nach Muster durchsuchen
Zitat:
Zitat:
Delphi-Quellcode:
ein Unterschied zu RegEx, welches standardmäßig mitten im String such ... meine Funktion verleicht immer den ganzen String:
Unit Types;
Var S, Se: String; X: TStringDynArray; S := 'FesterTeil|VeränderlicherTeil|FesterTeil'; X := CompareWildStringEx('FesterTeil|*|FesterTeil', S, []); If X <> nil Then Se := X[0] Else Se := ''; // 0 = erstes/einziges * ShowMessage('Se = "' + Se + '"');
Delphi-Quellcode:
ja und da nur je ein Ergebnis gesucht wird und man kein Offset angeben kann (wobei ein Offset nachzurüsten kein Problem wär, nur woher das Offset nehmen),
S := 'irgendwas|FesterTeil|VeränderlicherTeil|FesterTeil|irgendwas';
X := CompareWildStringEx('*FesterTeil*FesterTeil*', S, []); If X <> nil Then Se := X[1] Else Se := ''; // 1 = zweites * ShowMessage('Se = "' + Se + '"'); aber indem man das Suchmuster verlängert....
Delphi-Quellcode:
man könnte das zwar noch optimieren, aber das laß ich jetzt erstmal
Var S, Ss, Se, Se2: String;
i: Integer; X: TStringDynArray; Begin S := 'irgendwas|FesterTeil1|VeränderlicherTeil1|FesterTeil2|irgendwas' + 'irgendwas|FesterTeil1|VeränderlicherTeil2|FesterTeil2|irgendwas'; X := CompareWildStringEx('*FesterTeil1*FesterTeil2*FesterTeil1*FesterTeil2*', S, []); If X <> nil Then Begin Se := X[1]; // 1 = zweites * Se2 := X[3]; // 3 = viertes * End Else Begin Se := ''; Se := ''; End; ShowMessage('Se[0] = "' + Se + '" Se[1] = "' + Se2 + '"'); S := 'irgendwas|FesterTeil1|VeränderlicherTeil1|FesterTeil2|irgendwas' + 'irgendwas|FesterTeil1|VeränderlicherTeil2|FesterTeil2|irgendwas' + 'irgendwas|FesterTeil1|VeränderlicherTeil3|FesterTeil2|irgendwas'; i := -1; Ss := '*FesterTeil1*FesterTeil2*'; While True do Begin X := CompareWildStringEx(Ss, S, []); If X = nil Then Break; Inc(i); Ss := '*FesterTeil1' + Ss; // Ss := '*FesterTeil1*FesterTeil2*' + Ss; Se := X[Length(X) - 2]; ShowMessage('Se[' + IntToStr(i) + '] = "' + Se + '"'); End; |
Re: String nach Muster durchsuchen
So hab mich mal in RegEx eingelesen und zumindest schon mal E-Mail Adresse raussuchen hinbekommen =)
Jetzt will ich Hyperlinks raussuchen also alles zwischen href=" und dem Ende.
Delphi-Quellcode:
So wird das leider nichts...
begin
writeln(myFile,'Hyperlinks:'); RegExpr := nil; try RegExpr := TRegExpr.Create; if RegExpr <> nil then begin RegExpr.Expression := '|[url="(.*?)"](.*?)[/url]|' ; if RegExpr.Exec(memo1.text) then repeat Writeln(myFile,(RegExpr.Match[1])); until not RegExpr.ExecNext; end; except end; RegExpr.Free; Entdeckt jemand den Fehler bei der Expression? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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