Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erzeugt `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` in regulären Python-Ausdrücken nicht \"foo123bar\"?

Warum erzeugt `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` in regulären Python-Ausdrücken nicht \"foo123bar\"?

DDD
DDDOriginal
2024-11-03 22:19:30724Durchsuche

Why does `re.sub(r'(foo)', r'23', 'foobar')` not produce

Verwechslung mit regulären Python-Ausdrücken: Ersetzungen mit gruppennummerierten Rückverweisen

Beim Versuch, „foobar“ durch „foo123bar“ mithilfe eines regulären Ausdrucks zu ersetzen, Möglicherweise stoßen Sie auf unerwartete Ergebnisse. Eine Ersetzung wie re.sub(r'(foo)', r'1123', 'foobar') erzeugt nicht die gewünschte Ausgabe und gibt stattdessen „J3bar“ zurück.

Um das Problem zu verstehen, ist es wichtig Beachten Sie den Unterschied zwischen Rückverweisen auf Gruppennummern und wörtlichen Ziffern. In diesem Fall behandelt 1123 „1123“ als Literalzeichenfolge und nicht als Verweis auf die erste Capture-Gruppe. Dadurch funktioniert die Ersetzung nicht wie vorgesehen.

Um die korrekte Ersetzung zu erreichen, sollten Sie die Syntax g verwenden, wobei sich „Nummer“ auf die Gruppennummer bezieht. Zum Beispiel:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

In diesem Fall ist g<1> erfasst die Teilzeichenfolge, die mit der ersten Gruppe übereinstimmt, nämlich die Zeichenfolge „foo“ aus der Eingabe. Durch die Verwendung der entsprechenden Rückreferenzierung der Gruppennummer wird die Ersetzung korrekt durchgeführt, was zur Ausgabe „foo123bar“ führt.

Dieses Verhalten wird in der Python-Dokumentation erläutert, in der die Verwendung von g beschrieben wird. um eine benannte Gruppe anzugeben. Für Gruppennummern g kann verwendet werden, um eindeutig auf die entsprechende Gruppe zu verweisen, wodurch mögliche Verwirrung durch wörtliche Ziffern vermieden wird.

Das obige ist der detaillierte Inhalt vonWarum erzeugt `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` in regulären Python-Ausdrücken nicht \"foo123bar\"?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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