Entwickler-Ecke

Sonstiges (Delphi) - StringReplace mit WILDCARDS


TheUnknown - Do 04.02.10 11:39
Titel: StringReplace mit WILDCARDS
Hallo,

mir reisst langsam die Geduld, ich krieg das einfach nicht hin, mir eine Routine zusammenzuschreiben, die mich eine StringReplace-Funktion nutzen lässt, die auch Wildcards wie * oder ? akzeptiert.

Anstatt also z.B.

StringReplace(STRING, 'Radfahrerhelm', 'Ersetzt', []);

möchte ich lieber z.B.

StringReplace(STRING, '*fahr*', 'Ersetzt', []);

benutzen können, um nicht alle mögliche Möglichkeiten separat durchgehen zu müssen, in denen die Zeichenfolge "fahr" vorkommt. Natürlich mit den Optionen "rfReplaceAll" und "rfIgnoreCase"... Das kann ja nicht so schwer sein, aber ich bekomme das einfach nicht hin.

Bei den Schweizern habe ich eine Möglichkeit gefunden, zwei Strings mit Wildcards zu vergleichen, aber auch hier schaffe ich es nicht, den für mich wichtigen so Teil entnehmen, dass ich meine Funktion hinbekomme.

Wie muss so eine Funktion aussehen? :)


Narses - Do 04.02.10 12:41

Moin!

user profile iconTheUnknown hat folgendes geschrieben Zum zitierten Posting springen:
Das kann ja nicht so schwer sein, aber ich bekomme das einfach nicht hin.
Oh doch, das hat ein paar ziemlich ekelige Haken, dieses Problem... :?

Aber warum das Rad neu erfinden, schau dir mal TRegExpr [http://www.regexpstudio.com/TRegExpr/TRegExpr.html] an, das kann das alles schon und funktioniert bereits. ;)

cu
Narses


TheUnknown - Do 04.02.10 12:44

Der Link funktioniert leider nicht! :)


Tastaro - Do 04.02.10 12:45

Hmm - was soll er den ersetzen?

Bei

Delphi-Quelltext
1:
Result := StringReplace('Der Radfahrerhelm ist blau''*fahr*''Ersetzt', []);                    

müsste dann ja in Result nur 'Ersetzt' stehen.

Und auch bei

Delphi-Quelltext
1:
Result := StringReplace('Ich fahre ins Blaue''*fahr*''Ersetzt', []);                    

kommt in Result nur 'Ersetzt' raus.

Dagegen steht bei

Delphi-Quelltext
1:
Result := StringReplace('Die Fähre fährt''*fahr*''Ersetzt', []);                    

in Result auch 'Die Fähre fährt' raus.

Ist das so korrekt?

Dann kann man das mit:

Delphi-Quelltext
1:
2:
3:
4:
if pos('fahr', Text) <> 0 then
   Result = 'Ersetzt'
else
   Result = Text;

machen.

Beste Grüße


TheUnknown - Do 04.02.10 12:49

Jain, es geht mir darum, dass ich z.B. Klammerbemerkungen entfernen kann.

Sagen wir mal als Beispiel "This is a Song (New Bonus Track)". Wenn in der Klammerbemerkung nun also die "Folge " (*Bonus*)" vorkommt, soll nur noch "This ist a Song" übrig bleiben. Würde ich jetzt einfach nur "(Bonus Track) suchen, würde in dem Fall die Function nicht greifen, weil ja da noch das Wort "New" drin ist.


Narses - Do 04.02.10 12:50

Moin!

user profile iconTheUnknown hat folgendes geschrieben Zum zitierten Posting springen:
Der Link funktioniert leider nicht! :)
Hm :? hab ich auch gerade bemerkt... :nixweiss: und ich finde auf Anhieb auch keinen Mirror... :gruebel:

Ich häng´s mal dran, war AFAIR lizenztechnisch OK.

cu
Narses


TheUnknown - Do 04.02.10 15:41

Danke für die Mühe, aber ich habe es jetzt anders geregelt, zwar icht genau das, was ich wollte, aber es langt aus! :)