Python-Regex: Ist das Präfix „r' für Escape-Sequenzen obligatorisch?

Susan Sarandon
Freigeben: 2024-10-19 17:03:31
Original
297 Leute haben es durchsucht

Python regex: Is the

Python-Regex: Den Mythos des obligatorischen „r“-Präfixes für Escape-Sequenzen entlarven

Frage

Warum funktioniert das erste Beispiel unten ohne? „r“-Präfix vor einer Escape-Sequenz? Es wird allgemein angenommen, dass es beim Umgang mit Escape-Sequenzen obligatorisch sein sollte.

<code class="python"># example 1
import re
print(re.sub('\s+', ' ', 'hello     there      there'))
# prints 'hello there there' - not expected as r prefix is not used</code>
Nach dem Login kopieren

Antwort

Das Präfix „r“ ist in Regex-Mustern nicht immer notwendig, trotz der allgemeinen Regel, die es empfiehlt verwenden.

In Escape-Sequenzen dient der Backslash () als Indikator, um eine spezielle Zeichenfolge zu interpretieren oder ein Zeichen mit einer besonderen Bedeutung zu maskieren. Allerdings gelten nicht alle Sequenzen, denen ein Backslash vorangestellt ist, als gültige Escape-Sequenzen.

Um dies zu veranschaulichen, betrachten Sie diese Beispiele:

  • 'n' ist eine Escape-Sequenz, die dem Zeilenumbruch entspricht Zeichen.
  • r'n' ist ein rohes String-Literal, bei dem der Backslash als Literalzeichen erhalten bleibt und das „n“ nicht als Escape-Sequenz interpretiert wird.

Wann Das Präfix „r“ ist vor einer Escape-Sequenz nicht vorhanden. Python interpretiert es nur, wenn es sich um eine erkannte Escape-Sequenz handelt. Mit anderen Worten: Es wird nicht versucht, ungültige Escape-Sequenzen wie „s“ zu interpretieren.

Dieses Verhalten kann im bereitgestellten ersten Beispiel beobachtet werden:

  • 's' ist nicht der Fall eine gültige Escape-Sequenz.
  • Das Präfix „r“ fehlt.
  • Die Regex-Engine interpretiert das s als Literalzeichen, nicht als Escape-Sequenz für Leerzeichen.
  • Dadurch stimmt das Muster mit einem oder mehreren Leerzeichen überein und ersetzt diese durch ein einzelnes Leerzeichen.

Wenn jedoch das Präfix „r“ verwendet wird, werden alle Zeichen innerhalb des Musters wörtlich interpretiert. Das bedeutet, dass „r“ ein wörtlicher Backslash-Zeichen darstellt, dem der Buchstabe „s“ folgt.

Einschränkungen und Fallstricke

Das Präfix „r“ ist zwar nicht unbedingt für alle Escape-Sequenzen erforderlich, im Allgemeinen jedoch Die Verwendung wird empfohlen, insbesondere wenn mit komplexen Mustern gearbeitet wird, die mehrere Escape-Sequenzen enthalten. Dies hilft, Verwirrung und unbeabsichtigte Folgen zu vermeiden.

Das obige ist der detaillierte Inhalt vonPython-Regex: Ist das Präfix „r' für Escape-Sequenzen obligatorisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!