2012-08-22 13 views
6

Ich bemerke ein seltsames Verhalten in Pythons Regex-Bibliothek, und ich bin mir nicht sicher, ob ich etwas falsch mache.Fehler in Python Regex? (re mit re.MULTILINE)

Wenn ich eine Regex über re.sub() mit re.MULTILINE laufen lasse. Es scheint nur die ersten Vorkommen zu ersetzen. Es ersetzt alle Vorkommen, wenn ich re.MULTILINE ausschalte, re.subn(..., count = 0, flags = re.MULTILINE) verwende oder die Regex mit re.compile(..., re.MULTILINE) kompiliere.

Ich benutze Python 2.7 auf Ubuntu 12.04.

Ich habe ein willkürliches Beispiel auf posted:

  • Pastebin.com - Ausgabe von Terminal
  • codepad - Script, das Verhalten bestätigt (außer re.subn(), die auf 2,5 unterscheidet)

Kann jemand dieses Verhalten auf seinem Rechner bestätigen/leugnen?

EDIT: Realisiert sollte ich weitermachen und dies auf dem Python-Bug-Tracker veröffentlichen. EDIT 2: Ausgabe berichtet: http://bugs.python.org/msg168909

Antwort

16

Verwenden

re.sub(pattern, replace, text, flags=re.MULTILINE) 

statt

re.sub(pattern, replace, text, re.MULTILINE) 

, die

entspricht
re.sub(pattern, replace, text, count=re.MULTILINE) 

, die einen Fehler im Code ist.

Siehe re.sub()

+0

Ah, nun, das erklärt es haha. Ich habe das Problem geschlossen. Vielen Dank! – eacousineau

+0

Ich benutzte 're.I' ohne' flags = 'für eine geraume Zeit und wusste das nicht. Docs warnen Sie nicht vor solchen Verhaltensweisen, die ich für einen schwerwiegenden Fehler halte. Ich erinnere mich nicht einmal daran, dass jemand explizit 'flags' und' count' verwendet hat. – minerals

+0

@minerals: wenn Sie auf den Link in der Antwort klicken; Sie sollten die Funktionssignatur 're (pattern, repl, string, count = 0, flags = 0) sehen und die Dokumentation erklärt, was der Parameter' count' bedeutet. – jfs