AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

RegEx für zwei Zeichen

Ein Thema von freak4fun · begonnen am 11. Feb 2010 · letzter Beitrag vom 11. Feb 2010
Antwort Antwort
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

RegEx für zwei Zeichen

  Alt 11. Feb 2010, 02:57
Hallo,
ich hab heute erst angefangen mit RegEx und gleich ein Problem.
Ich habe eine Zeile die so ausieht:
Code:
2181 Statistik MP WS 2009 3,7 5.0 BE 02.02.2010 1
Diese habe ich nun in einer StringList. An der Stelle wo das MP steht kann auch SP, PL oder VL stehen.
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:
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);
Aber auch wenn da Mj statt MP steht wird es True.

Wo ist mein Fehler?
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#2

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 04:08
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]*
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.011 Beiträge
 
Delphi 12 Athens
 
#3

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 07:27
Ich würde noch die Leerzeichen mit einbeziehen,
Delphi-Quellcode:
'( MP | VL | PL )'
// oder
' (MP|VL|PL) '
denn wenn bei "Statistik" auch mal was Anderes steht, welches eine dieser Zeichenfolgen enthält, dann gäbe es Probleme.

Es gibt auch verschiedene Wege, um Wortgrenzen zu entdecken.
eventuell so
'[^A-Za-z](MP|VL|PL)[^A-Za-z]'
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#4

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 07:36
Zitat von himitsu:
Es gibt auch verschiedene Wege, um Wortgrenzen zu entdecken.
eventuell so
'[^A-Za-z](MP|VL|PL)[^A-Za-z]'
Damit findest Du aber keine Wortgrenzen; Blanks und Zahlen werden hier bspw. mitgefressen.

So findet man Wortgrenzen in perlkompatiblen Dialekten.
Code:
\b(MP|VL|PL)\b
Gruß
s-off
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.011 Beiträge
 
Delphi 12 Athens
 
#5

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 08:05
Zitat von s-off:
Damit findest Du aber keine Wortgrenzen; Blanks und Zahlen werden hier bspw. mitgefressen.
Nja, bin auch noch nicht so versiert mit dieser rießigen Syntax.

Blanks waren geplant, also vorallem die Leerzeichen
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 10:12
Zitat von himitsu:
Delphi-Quellcode:
'( MP | VL | PL )'
// oder
' (MP|VL|PL) '
Das geht! Ich hab mich durch die eckigen Klammern blenden lassen. Dadurch wurd von SP das S in Statistik gefunden. Ich wusste nicht das die Alternativen auch ohne [] gehen. Anfängerfehler! Danke euch!
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.011 Beiträge
 
Delphi 12 Athens
 
#7

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 10:17
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'
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 10:21
Zitat von himitsu:
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.
Genau, hatte ich auch zwischenzeitlich: [S|M|V|P]{1}[P|L]{1} aber das ging auch irgendwie nicht.
Zitat von himitsu:
wobei theoretisch auch ' MP | VL | PL ' gehen müßte
Geht auch!
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.011 Beiträge
 
Delphi 12 Athens
 
#9

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 10:25
'\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 ' \| '
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: RegEx für zwei Zeichen

  Alt 11. Feb 2010, 10:40
Zitat von himitsu:
'\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 ' \| '
Ja, doch! http://fnse.de/S01/17P.gif
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz