Regex: Geben Sie "- Raum oder start of string" und "space oder Ende des Strings"
Sich vorstellen, Sie versuchen zu pattern match "stackoverflow".
Möchten Sie die folgenden:
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 weiß, wie zu analysieren stackoverflow, wenn es hat Räume auf beiden Seiten mit:
/\s(stackoverflow)\s/
Gleich mit, wenn Ihr am Anfang oder Ende einer Zeichenfolge:
/^(stackoverflow)\s/
/\s(stackoverflow)$/
Aber wie geben Sie "Raum-oder end-of-string" und "Raum oder den Anfang der Zeichenfolge" mit einem regulären Ausdruck?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine der folgenden Optionen verwenden:
Auch, wenn Sie nicht möchten, dass der Speicherplatz in Ihrem Spiel, können Sie lookbehind/aheads.
\b
ist eine null-Breite assertion; es ist nie verbraucht keine Zeichen. Es gibt keine Notwendigkeit, wickeln Sie es in ein lookaround.\s
. Ich passt meine Antwort.\b
standard-ASCII-only, das heißt, keine unicode-Unterstützung. Wenn Sie übereinstimmen müssen unicode-Wörter, die Sie haben, keine Wahl aber, um diese stattdessen zu verwenden: stackoverflow.com/a/6713327/1329367(?:^|\s)
(?<=\s|^)
mit(?:(?<=\s)|(?<=^))
. Andernfalls erhalten Sieerror: look-behind requires fixed-width pattern
\b
erachten würde, andere Zeichen-wie ".
" als word-breakers, in der Erwägung, dass der Fragesteller explizit sagt "Platz". @gordy ' s Lösung scheint mir besser.(^|\s)
würde mit space oder den Anfang der Zeichenkette und die($|\s)
für Raum oder Ende der Zeichenkette. Zusammen ist es:$1string$2
.$
und^
in einer Charakter-Klasse, aber das zeigt Sie nur in einem regelmäßigen Muster-Gruppe.Hier ist, was ich verwenden würde:
In anderen Worten entsprechen, "stackoverflow", wenn es nicht Voraus durch ein nicht-whitespace-Zeichen und nicht gefolgt durch ein nicht-whitespace-Zeichen.
Dies ist einfach besser (IMO) als die "Raum-oder-Anker" - Ansatz, und es geht nicht an, dass die Zeichenfolge beginnt und endet mit dem Wort Zeichen wie die
\b
Ansatz.\b
Spiele an den Wortgrenzen (ohne eigentlich passend zu jedem Zeichen), so sollte Folgendes tun, was Sie wollen:mystr = r'\bstack overflow\b'