Heim >Backend-Entwicklung >Python-Tutorial >Warum schlägt Pythons „\b'-Wortgrenze bei Sonderzeichen in regulären Ausdrücken fehl?

Warum schlägt Pythons „\b'-Wortgrenze bei Sonderzeichen in regulären Ausdrücken fehl?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-09 05:00:10896Durchsuche

Why Does Python's `b` Word Boundary Fail with Special Characters in Regular Expressions?

Umgang mit Wortgrenzen für Muster mit Sonderzeichen

Pythons re-Modul stellt das b-Muster zum Abgleichen von Wortgrenzen bereit. Bei Verwendung mit Mustern, die Sonderzeichen wie {} enthalten, kann das Verhalten jedoch unerwartet werden.

Betrachten Sie das Muster Sortesindex[persons]{Sortes}. Wenn wir b verwenden, um sicherzustellen, dass es nur mit Ganzwortinstanzen übereinstimmt, würden wir ein positives Ergebnis in „Test Sortesindex[persons]{Sortes} Text“ erwarten, aber es schlägt fehl.

Untersuchung des Wortgrenzenverhaltens

Die Dokumentation erklärt b als übereinstimmende Grenzen zwischen Wort- und Nicht-Wort-Zeichen oder zwischen dem Anfang/Ende einer Zeichenfolge und einem Wort Zeichen.

In unserem Muster entspricht b dem Ende des Wortes, aber nicht explizit dem Anfang. Das Vorhandensein von } als Sonderzeichen führt zu Mehrdeutigkeit für b, was zu unerwartetem Verhalten führt.

Adaptive Wortgrenzen verwenden

Eine Lösung besteht darin, adaptive Wortgrenzen zu verwenden. die den Kontext rund um das Muster berücksichtigen. Sie prüfen auf beiden Seiten, ob es sich um Nicht-Wortzeichen oder Wortzeichen handelt, und stellen so eine präzise Übereinstimmung sicher. Dies kann dargestellt werden als:

(?:(?!w)|b(?=w)){}(?:(?<=w)b|(?

wobei:

  • (?:(?!w)|b(?=w)) eine linke Grenze ist, die Übereinstimmungen an Wortgrenzen oder für ermöglicht Nicht-Wort-Zeichen auf der linken Seite.
  • (?:(?<=w)b|(?

Dies gewährleistet eine genaue Übereinstimmung für Sortesindex[persons]{Sortes} in der Testzeichenfolge, ausgenommen Übereinstimmungen wie Sorten.

Alternative Optionen

  • Eindeutige Wortgrenzen: Ähnlich wie adaptive Wortgrenzen, erfordern jedoch das Fehlen jeglicher Wortzeichen auf beiden Seiten des Musters.
  • Leerraumgrenzen: Überprüfen Sie insbesondere auf stimmt überein, wenn das Muster von Leerzeichen umgeben ist.

Den richtigen Ansatz wählen

Adaptive Wortgrenzen sind nachsichtiger und ermöglichen den Abgleich mit Nicht-Wort-Zeichen in der Umgebung das Muster. Eindeutige Wortgrenzen sind restriktiver und erfordern keine Wortzeichen an beiden Enden. Wählen Sie den Ansatz, der Ihren spezifischen Matching-Anforderungen am besten entspricht.

Das obige ist der detaillierte Inhalt vonWarum schlägt Pythons „\b'-Wortgrenze bei Sonderzeichen in regulären Ausdrücken fehl?. 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