Разница между \b
и \<
/\>
что \b
может быть использован в PCRE шаблонов регулярных выражений (при указании perl=TRUE
) и шаблоны регулярных выражений (ICU stringr пакета).
> 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"
Преимущество \<
(всегда означает начало слова) и \>
(всегда совпадает с концом слова) является то, что они являются однозначными. \b
может соответствовать обеим позициям. более
Одна вещь, чтобы рассмотреть (refrence):
POSIX 1003,2 режим GSUB и gregexpr правильно не работает с повторяющимися словесными границами (например, pattern = "\b"
). Для таких совпадений используйте perl = TRUE
(но это может работать не так, как ожидалось, с входами, отличными от ASCII, поскольку значение слова «зависит от системы»).
Есть ли дополнительные отличия? Имеет ли смысл этого смысл для вас или это ошибка 'txt <- c (« Меня зовут ASDFNAKFANDpancake »); gsub ("\\ <", "%", txt) '? – Jota
В 'gsub' есть ошибка, когда вы используете его с регулярным выражением TRE, используйте PCRE' gsub ("\\ b", "%", txt, perl = T) ', см. Мое обновление. –
Если вы спросите меня, вам лучше придерживаться '\ b': это признают большинство, если не все онлайн-тестеры regex (например [regex101.com] (http://regex101.com)). Используйте утверждения с нулевой шириной только с осторожностью. –