Seite 1 von 1
Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 12:15
von tugayyolu
Hallo Leute,
ich brauche Hilfe für meine Hausafugabe.
Könnte jemand zu folgenden Regular Expressions(r1,r2,r3) einen passenden String s1,s2,s3 geben?
Code: Alles auswählen
r1 = r'^(\d{3})(x\1\w{2})\2$'
r2 = r'^(\w{3}-([cdefgah]{3}[3-8]{2}))-xfd-\1-\w{4}-\2$'
r3 = r'^((\d\w)(\s\W)\2)\3\1$'
mfg
Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 12:40
von BlackJack
@tugayyolu: Warum sollten wir Deine Hausaufgaben machen!?
Edit: Die Antwort auf die Frage ist übrigens *Nein*, das *kann* niemand. Zumindest nicht für `s1` und `s2`.

Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 12:53
von pillmuncher
Für r1 und r2: Nein, kann ich nicht. Beide Regexe können gar nichts matchen, weil sie nur auf Strings passen, die ein Leerzeichen vor ihrem ersten Zeichen stehen haben, und solche Strings gibt es nicht.
Außerdem ist die zweite Zeile (mit r2) kein gültiges Python.
Für r3 hab ich eine Lösung, die ich dir gerne zeigen werde, sobald du mir zeigst, was du bereits probiert hast.
Gruß
Mick.
Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 13:43
von tugayyolu
@pillmuncher
Hallo,
ich habe r1 und r2 ausgebessert. Ich habe falsch abgetipt.
meine lösug zu r3 wäre so:
(\d\w)-> 1a
(\s\W)-> (whitespace)2
r'^((\d\w)(\s\W)\2)\3\1$->(whitespace)21a(whitespace)21a
\2,\3,\1 diese Zahlen verwirren mich. Kannst du auch erklären was die zu beduten haben?
Gruß
Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 13:54
von cofi
http://docs.python.org/howto/regex.html
\n sind Referenzen auf die Gruppe n
Mehr Hilfe wirst du zu deiner Hausaufgabe hier wohl nicht bekommen.
Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 14:09
von pillmuncher
tugayyolu hat geschrieben:@pillmuncher
meine lösug zu r3 wäre so:
(\d\w)-> 1a
(\s\W)-> (whitespace)2
r'^((\d\w)(\s\W)\2)\3\1$->(whitespace)21a(whitespace)21a
\2,\3,\1 diese Zahlen verwirren mich. Kannst du auch erklären was die zu beduten haben?
Das sind sog. back references. Damit kann man bereits "gefangene" Gruppen wiederholen. Gruppen werden definiert durch runde Klammern. \1 bezieht sich dann auf das, was durch die Gruppe, die durch die erste öffnende Klammer definiert wird, gematcht wurde. Etwa so:
Hierbei gibt es einen Match von
(\w) auf
a, und von
\1 auf das, was durch die Gruppe
(\w) vorher gematcht wurde, also wieder
a. Gruppen können geschachtelt auftreten:
Hierbei wird
a7 durch Gruppe 1 ==
(\w(\d)) gematcht und
7 durch Gruppe 2 ==
(\d).
r3 in deinem Beispiel stellt sich also folgendermaßen dar:
Code: Alles auswählen
^ = Beginn des Strings
( = Beginn der ersten Gruppe
( = Beginn der zweiten Gruppe
\d = eine Ziffer
\w = ein Buchstabe
) = Ende der zweiten Gruppe
( = Beginn der dritten Gruppe
\s = ein Whitespace
\W = ein Nicht-Buchstabe
) = Ende der dritten Gruppe
\2 = Rückbezug darauf, was durch die zweite Gruppe gematcht wurde
) = Ende der ersten Gruppe
\3 = Rückbezug darauf, was durch die dritte Gruppe gematcht wurde
\1 = Rückbezug darauf, was durch die erste Gruppe gematcht wurde
$ = Ende des Strings
Damit sollte sich für r3 ein passender String konstruieren lassen.
Gruß,
Mick.
Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 15:38
von tugayyolu
Hallo Mick,
erstmal danke für ausführliche Antwort.
ich habe deine Anweisung gefolgt und die 3 Strings konstruiert. Kannst du vielleicht kurz kontrollieren ob die Strings schon passen
Code: Alles auswählen
r1:
\d{3} =123
x\1\w{2}=x123ab
\2 =x123ab
+
________________
123x123abx123ab
r2:
\w{3}- =abc-
[cdefgah]{3}[3-8]{2}-xfd- =gah45-xfd-
\1- =abc-gah45-xfd--
\w{4}- =bing-
\2 =gah45
+
_______________________________________
abc-gah24-xfd-abc-gah45-xfd--bing-gah45
r3:
(\d\w) =1a
(\s\w) = _
\2 =1a
\3 =1a _
\1 =1a
+
_____________________
1a _1a _1a _1a
Gruß
Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 16:04
von BlackJack
@tugayyolu: Warum kontrollierst Du das nicht einfach selbst!? Das kann man doch leicht ausprobieren.
Re: Regular Expressions Hilfe
Verfasst: Samstag 19. November 2011, 16:56
von pillmuncher
Hallo tugayyolu.
r1 und r3 stimmen. r2 dagegen leider nicht.
Code: Alles auswählen
r2:
\w{3}- =abc-
[cdefgah]{3}[3-8]{2}-xfd- =gah45-xfd-
\1- =abc-gah45-xfd--
\w{4}- =bing-
\2 =gah45
+
_______________________________________
abc-gah24-xfd-abc-gah45-xfd--bing-gah45
^^ Tippfehler.
Desweiteren gehört
-xfd- zu keiner Gruppe und kann deswegen auch nicht durch eine back reference gematcht werden. Versuch mal das:
Code: Alles auswählen
(
\w{3} # abc
- # -
([cdefgah]{3}[3-8]{2}) # gah45
) # abc-gah45
-xfd- # -xfd-
\1 # abc-gah45
-\w{4}- # bing
\2 # gah45
Gruß,
Mick.