Der Unterschied zwischen dem \b
und \<
/\>
ist, dass \b
können in PCRE regex Muster verwendet werden und die ICU regex Muster (stringr Paket) (wenn man perl=TRUE
angeben).
> s = "no where nowhere"
> sub("\\<no\\>", "", s)
[1] " where nowhere"
> sub("\\<no\\>", "", s, perl=T) ## \> and \< do not work with PCRE
[1] "no where nowhere"
> sub("\\bno\\b", "", s, perl=T) ## \b works with PCRE
[1] " where nowhere"
> library(stringr)
> str_replace(s, "\\bno\\b", "")
[1] " where nowhere"
> str_replace(s, "\\<no\\>", "")
[1] "no where nowhere"
Der Vorteil \<
(steht immer für den Anfang eines Wortes) und \>
(immer stimmt mit dem Ende eines Wortes) ist, dass sie eindeutig sind. Die \b
kann beide Positionen übereinstimmen.
Eine weitere Sache zu prüfen (refrence):
POSIX 1003.2-Modus von gsub und gregexpr funktioniert nicht richtig mit wiederholtem Wort-Grenzen (zum Beispiel pattern = "\b"
). Verwenden Sie perl = TRUE
für solche Übereinstimmungen (aber das funktioniert möglicherweise nicht wie erwartet mit Nicht-ASCII-Eingaben, da die Bedeutung von 'Wort' systemabhängig ist).
Gibt es weitere Unterschiede? Macht die Ausgabe für Sie Sinn oder ist das ein Fehler 'txt <- c (" Mein Name ist ASDFNAKFANDpancake "); gsub ("\\ <", "%", txt) '? – Jota
Es gibt einen Fehler in 'gsub', wenn Sie ihn mit einem TRE-Regex verwenden, verwenden Sie den PCRE' gsub ("\\ b", "%", txt, perl = T) ', siehe mein Update. –
Wenn Sie mich fragen, sollten Sie lieber bei '\ b' bleiben: Es wird von den meisten, wenn nicht allen Regex-Online-Testern (wie [regex101.com] (http://regex101.com)) erkannt. Verwenden Sie Assertion nur für Assertion mit geringer Breite mit Vorsicht. –