regular expression: substitute erst mit dem zweiten find

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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)
karolus
User
Beiträge: 141
Registriert: Samstag 22. August 2009, 22:34

Hallo

Code: Alles auswählen

re.sub("( {2,}[^ ]+) {2,}", r"\1 ", searchstring)
Gruß Karo
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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. ;)
Antworten