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.
In specifications, Murphy's Law supersedes Ohm's.