2016-03-23 3 views
1

Файл справки R для regex говоритразница Regex между словом границей конца и края

Символы \ < и \> соответственно совпадает с пустой строкой в ​​ начало и конец слова. Символ \ б совпадает с пустой строкой в ​​ край слова

В чем разница между концом и краем (слова)?

ответ

2

Разница между \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, поскольку значение слова «зависит от системы»).

+0

Есть ли дополнительные отличия? Имеет ли смысл этого смысл для вас или это ошибка 'txt <- c (« Меня зовут ASDFNAKFANDpancake »); gsub ("\\ <", "%", txt) '? – Jota

+1

В 'gsub' есть ошибка, когда вы используете его с регулярным выражением TRE, используйте PCRE' gsub ("\\ b", "%", txt, perl = T) ', см. Мое обновление. –

+0

Если вы спросите меня, вам лучше придерживаться '\ b': это признают большинство, если не все онлайн-тестеры regex (например [regex101.com] (http://regex101.com)). Используйте утверждения с нулевой шириной только с осторожностью. –