![]() |
RegEx für zwei Zeichen
Hallo,
ich hab heute erst angefangen mit RegEx und gleich ein Problem. Ich habe eine Zeile die so ausieht:
Code:
Diese habe ich nun in einer StringList. An der Stelle wo das MP steht kann auch SP, PL oder VL stehen.
2181 Statistik MP WS 2009 3,7 5.0 BE 02.02.2010 1
Ich möchte nun prüfen ob an einer Stelle in der Stringlist (list) SP, PL, MP oder VL steht. So habe ich es versucht:
Delphi-Quellcode:
Aber auch wenn da Mj statt MP steht wird es True. :(
i := 0;
repeat Inc(i); ShowMessage(IntToStr(i) + ' ' + list[i] + ' ' + BoolToStr(ExecRegExpr('[\(MP\)|\(VL\)|\(PL\)]', list[i]), true)); until ExecRegExpr('[\(MP\)|\(VL\)|\(PL\)]', list[i]) or (i = list.Count); Wo ist mein Fehler? |
Re: RegEx für zwei Zeichen
Hm. Schon lang nicht mehr gemacht, aber müsste das nicht einfach so etwas sein?:
(MP|VL|PL) Frei nach dem Schema: (Alternative1 | Alternative2 | ... | AlternativeN) In eckigen Klammern werden Zeichenmengen notiert; z.B. beliebig viele Buchstaben: [A-Za-z]* |
Re: RegEx für zwei Zeichen
Ich würde noch die Leerzeichen mit einbeziehen,
Delphi-Quellcode:
denn wenn bei "Statistik" auch mal was Anderes steht, welches eine dieser Zeichenfolgen enthält, dann gäbe es Probleme.
'( MP | VL | PL )'
// oder ' (MP|VL|PL) ' Es gibt auch verschiedene Wege, um Wortgrenzen zu entdecken. eventuell so
Delphi-Quellcode:
'[^A-Za-z](MP|VL|PL)[^A-Za-z]'
|
Re: RegEx für zwei Zeichen
Zitat:
So findet man Wortgrenzen in perlkompatiblen Dialekten.
Code:
\b(MP|VL|PL)\b
|
Re: RegEx für zwei Zeichen
Zitat:
Blanks waren geplant, also vorallem die Leerzeichen :stupid: und Zahlen und anderes hab ich einfach mal ignoriert ... sieht, anhand des Beispiels, nicht so aus, als wenn man dieses beachten muß. Auch wenn deines da schon besser ist, hätte meines zumindestens irgendwie funktioniert. :roll: |
Re: RegEx für zwei Zeichen
Zitat:
|
Re: RegEx für zwei Zeichen
Klar geht das ... [] steht nur für EIN "zeichen", wobei man hier praktisch mehrere Zeichen hat.
[a..z] steht sozusagen für (a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y |z) es ist also praktisch gesehn nur eine Vereinfachung der Alternativen. wobei theoretisch auch ' MP | VL | PL ' gehen müßte oder '\b(MP|(V|P)L)\b' :lol: |
Re: RegEx für zwei Zeichen
Zitat:
Zitat:
|
Re: RegEx für zwei Zeichen
'\b(MP|(V|P)L)\b' = MP VL oder PL
'\b((S|M|V|P)(P|L))\b' = SP MP VP PP SL ML VL oder PL die {1} kannst du weglassen, da dieses praktisch der Standard ist Dieses [...] entspricht einem SET OF CHAR (in Delphi) und (...) ist eine Gruppierung. PS: ( | und ) sind innerhalb eines SETS nur ganz normale Zeichen. ' [|] ' entspricht also ' \| ' |
Re: RegEx für zwei Zeichen
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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