Heim > Backend-Entwicklung > Python-Tutorial > Warum verhält sich re.sub mit dem re.MULTILINE-Flag unerwartet?

Warum verhält sich re.sub mit dem re.MULTILINE-Flag unerwartet?

Patricia Arquette
Freigeben: 2024-11-05 14:51:02
Original
453 Leute haben es durchsucht

Why is re.sub Behaving Unexpectedly with the re.MULTILINE Flag?

Unerwartete Ersetzung mit re.sub und Flag

In der Python-Dokumentation heißt es, dass das re.MULTILINE-Flag das Caret-Zeichen (^) zulässt Übereinstimmung am Anfang jeder Zeile. Wenn dieses Flag jedoch mit re.sub verwendet wird, kann es zu unerwartetem Verhalten kommen.

Betrachten Sie dieses Beispiel:

<code class="python">import re
s = """// The quick brown fox.
// Jumped over the lazy dog."""
result = re.sub('^//', '', s, re.MULTILINE)
print(result)</code>
Nach dem Login kopieren

Das erwartete Ergebnis ist, dass alle Zeilen mit „//“ beginnen durch eine leere Zeichenfolge ersetzt, sodass nur Folgendes übrig bleibt:

The quick brown fox.
Jumped over the lazy dog.
Nach dem Login kopieren

Das tatsächliche Ergebnis lautet jedoch:

 The quick brown fox.
// Jumped over the lazy dog.
Nach dem Login kopieren

Grund für das Problem

Das Problem entsteht, weil die Funktion re.sub ein viertes Argument für die maximale Anzahl der durchzuführenden Ersetzungen akzeptiert. Im Beispiel wurde re.MULTILINE fälschlicherweise als Anzahl statt als Flag verwendet.

Lösung

Um dieses Verhalten zu korrigieren, verwenden Sie ein benanntes Argument, um anzugeben flag:

<code class="python">result = re.sub('^//', '', s, flags=re.MULTILINE)</code>
Nach dem Login kopieren

Alternativ können Sie den regulären Ausdruck mit dem gewünschten Flag kompilieren, bevor Sie ihn mit re.sub verwenden:

<code class="python">regex = re.compile('^//', re.MULTILINE)
result = re.sub(regex, '', s)</code>
Nach dem Login kopieren

Durch die korrekte Angabe des re.MULTILINE-Flags können Sie kann sicherstellen, dass alle Vorkommen des Musters ^// ersetzt werden, unabhängig von ihrer Position innerhalb der Zeichenfolge.

Das obige ist der detaillierte Inhalt vonWarum verhält sich re.sub mit dem re.MULTILINE-Flag unerwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage