Frage

In den Python-Dokumenten heißt es:

re.MULTILINE:Wenn es angegeben wird, entspricht das Musterzeichen „^“ dem Anfang der Zeichenfolge und dem Anfang jeder Zeile (unmittelbar nach jedem Zeilenumbruch) ...Standardmäßig stimmt „^“ nur mit dem Anfang der Zeichenfolge überein ...

Was passiert also, wenn ich das folgende unerwartete Ergebnis erhalte?

>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
War es hilfreich?

Lösung

Schauen Sie sich die Definition von an re.sub:

sub(pattern, repl, string[, count])

Das vierte Argument ist die Anzahl, die Sie verwenden re.MULTILINE (was 8 ist) als Anzahl, nicht als Flag.

Sie müssen Ihre Regex kompilieren, wenn Sie Flags verwenden möchten.

re.sub(re.compile('^//', re.MULTILINE), '', s)

A flags Das Argument wurde in Python 2.7 hinzugefügt, daher lautet die vollständige Definition jetzt:

re.sub(pattern, repl, string[, count, flags])

Was bedeutet, dass:

re.sub('^//', '', s, flags=re.MULTILINE)

funktioniert.

Andere Tipps

re.sub('(?m)^//', '', s)

Die vollständige Definition von re.sub Ist:

re.sub(pattern, repl, string[, count, flags])

Das heißt, wenn Sie Python die Parameter mitteilen, können Sie übergeben flags ohne zu passieren count:

re.sub('^//', '', s, flags=re.MULTILINE)

oder prägnanter:

re.sub('^//', '', s, flags=re.M)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top