Seite 1 von 1

regular expression: substitute erst mit dem zweiten find

Verfasst: Montag 21. Juni 2010, 13:13
von Francesco
Hallo
gegeben:

Code: Alles auswählen

searchstring = "test   12     345 6     7"
replacedstring = re.sub('  +', ' ', searchstring)
ersetzt jede Folge mit zwei oder mehr Leerzeichen mit einem Leerzeichen

Nun kann ich auch als letztes argument für sub noch count angeben, dann ersetzt es noch die ersten count occurences.

Jetzt möchte ich aber zB, dass er nur das jeweils zweite gefundene pattern ersetzt,. also, dass das Ergebnis

Code: Alles auswählen

replacedstring = "test   12 345 6     7"
bekomme.

Frage: Geht das (einfach) mit re? Wenn ja, wie?

Zusatz: das würde mich auch bei der simplen stringreplace methode interessieren (oder muss man sicher erst manuell die positionen herausuchen: auf die art:

Code: Alles auswählen

 sstring[firstfindpos:].replace (findstring, replacestring, 2)

Re: regular expression: substitute erst mit dem zweiten find

Verfasst: Montag 21. Juni 2010, 13:44
von karolus
Hallo

Code: Alles auswählen

re.sub("( {2,}[^ ]+) {2,}", r"\1 ", searchstring)
Gruß Karo

Re: regular expression: substitute erst mit dem zweiten find

Verfasst: Montag 21. Juni 2010, 14:02
von Francesco
karolus hat geschrieben:Hallo

Code: Alles auswählen

re.sub("( {2,}[^ ]+) {2,}", r"\1 ", searchstring)
Gruß Karo
Oh, dankeschön. Wird wohl wieder einmal Zeit dafür sein, 7.2 regular expressions aus der python doc nochmals aufzufrischen. ;)