Seite 1 von 1

Zeichenkette ersetzen durch eine sich verändernde Variable

Verfasst: Samstag 26. Januar 2008, 12:52
von sil-be
Hallo!

irgendwie kriege ich das nicht hin.
Versuche eine Zeichenkette zu finden und diese durch eine sich verändernde Variable zu ersetzen.

Also in der Art:
num = 1
bub = re.search(r"\S+\s\S+", txt)
if bub:
num = num + 1
txt = re.sub(r"(\S+\s\S+)", "\\1%d und noch ein text" % num, txt)

Das Problem bei dieser Schreibweise ist, dass es nach dem Treffer alle Ersetzungen auf einmal ausführt und somit 'num' immer 2 ist. :-(

Verfasst: Samstag 26. Januar 2008, 12:58
von BlackJack
Da in Python Einrückung wichtig für die Bedeutung des Programms ist, wäre es nett, wenn Du den Quelltext mit Einrückung und in code-Tags setzt. Siehe den Python-Button im Formular zum Editieren von Beiträgen.

Man kann bei `re.sub()` auch eine Funktion oder ein anderes aufrufbares Objekt, anstelle einer Zeichenkette für die Ersetzung angeben, die ein Match-Objekt bekommt und den Ersetzungstext zurückgeben muss.

Edit:

Code: Alles auswählen

import re
from itertools import count

def main():
    text = 'Foo # bar # baz ##.'
    get_next_number = count(1).next
    text = re.sub(r'#', lambda m: '<%d>' % get_next_number(), text)
    print text
Ausgabe: ``Foo <1> bar <2> baz <3><4>.``

Verfasst: Samstag 26. Januar 2008, 14:32
von sil-be
Vielen Dank!!!!!

Genau das habe ich gesucht!

Sorry, nähstes mal editiere ich den Quellcode!