2009-02-13 11 views
5

Ich habe einen Textblock, und für jede Regex-Übereinstimmung möchte ich diese Übereinstimmung mit dem Rückgabewert von einer anderen Funktion ersetzen. Das Argument für diese Funktion ist natürlich der übereinstimmende Text.Python mit Ergebnis der Funktion für Regulärer Ausdruck Substitution

Ich habe Probleme mit dem Versuch, eine One-Pass-Lösung für dieses Problem zu finden. Es fühlt sich an, als sollte es ziemlich einfach sein.

Antwort

14

Von the documentation:

>>> def dashrepl(matchobj): 
...  if matchobj.group(0) == '-': return ' ' 
...  else: return '-' 
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files') 
'pro--gram files' 
+0

Verdammt, ich nahm nur an, dass es eine Zeichenfolge in dieser Funktion sein könnte – esiegel

0

Python-agnostisch: Wer passt alles vor und alles nach dem Text zu ersetzen.

/^(.*?)(your regexp to match)(.*)$/ 

Dann haben Sie die nächste vor und nach dem Text, den Sie ersetzen werden. Der Rest ist einfach - fügen Sie einfach das Ergebnis Ihrer Funktion zwischen den beiden Strings ein.

+0

Das OP sagte "für jedes Spiel", so dass Sie nur die Hälfte des Algorithmus beschrieben. In jedem Fall wurde die passende Antwort gegeben und gewählt. – tzot