Stellen Sie sich vor, Sie versuchen, eine Musterübereinstimmung mit "Stapelüberlauf" durchzuführen.
Sie möchten Folgendes:
this is stackoverflow and it rocks [MATCH]
stackoverflow is the best [MATCH]
i love stackoverflow [MATCH]
typostackoverflow rules [NO MATCH]
i love stackoverflowtypo [NO MATCH]
Ich kann den Stackoverflow analysieren, wenn auf beiden Sites Leerzeichen vorhanden sind.
/\s(stackoverflow)\s/
Gleiches gilt, wenn es am Anfang oder Ende eines Strings steht:
/^(stackoverflow)\s/
/\s(stackoverflow)$/
Aber wie geben Sie "Leerzeichen oder Ende der Zeichenfolge" und "Leerzeichen oder Anfang der Zeichenfolge" mit einem regulären Ausdruck an?
regex
preg-match
anonym-one
quelle
quelle
\b
ist eine Behauptung mit einer Breite von Null; Es verbraucht niemals Zeichen. Es ist nicht nötig, es in einen Lookaround zu wickeln.\b
nur Standard-ASCII verwendet wird, dh keine Unicode-Unterstützung. Wenn Sie Unicode-Wörter suchen(?:^|\s)
(?<=\s|^)
mit(?:(?<=\s)|(?<=^))
. Andernfalls erhalten Sieerror: look-behind requires fixed-width pattern
\b
würden andere Zeichen - wie ".
" als Wortbrecher betrachten, während der Fragesteller ausdrücklich "Leerzeichen" sagte. @ gordys Lösung scheint besser zu sein.(^|\s)
würde mit Leerzeichen oder Beginn der Zeichenfolge und($|\s)
mit Leerzeichen oder Ende der Zeichenfolge übereinstimmen . Zusammen ist es:quelle
$1string$2
.$
und^
eine Zeichenklasse in, aber das zeigt sie können einfach in eine regelmäßiges Muster Gruppe gestellt werden.Folgendes würde ich verwenden:
Mit anderen Worten, stimmen Sie mit "stackoverflow" überein, wenn ihm kein Nicht-Leerzeichen vorangestellt ist und kein Nicht-Leerzeichen folgt .
Dies ist ordentlicher (IMO) als der "Space-or-Anchor" -Ansatz, und es wird nicht davon ausgegangen, dass die Zeichenfolge wie der
\b
Ansatz mit Wortzeichen beginnt und endet .quelle
\b
stimmt an Wortgrenzen überein (ohne tatsächlich mit Zeichen übereinzustimmen), daher sollte Folgendes tun, was Sie wollen:quelle
mystr = r'\bstack overflow\b'