Проблемы с регулярным выражением в R: Соответствие слову, окруженному пробелами, или началу/концу строки

Я хочу подсчитать количество слов из словаря, которые появляются в строке, если они окружены пробелами или находятся в начале или конце строки.

Я использую этот ответ следующим образом:

library(stringi)

testStr <- c("dutch dutch brown", "brown ", "AAdutch", "dutchAA", "AAbrown",
             "brownAA", "hello")
stri_count_regex(testStr, "(^|\\s+)dutch|brown(\\s+|$)")

Что возвращает 3 1 0 1 1 0 0, но я ожидаю 3 1 0 0 0 0 0. Итак, проблема в том, что он также считает "dutchAA" и "AAbrown", которые мне не нужны.

Я немного озадачен этим, так как это регулярное выражение отлично работает, когда я запускаю его на RegExr.


person ulima2_    schedule 08.03.2017    source источник
comment
возможно, stri_count_regex(testStr, "\\b(dutch|brown)\\b") не уверен в разнице, можете ли вы опубликовать ссылку на regextr, который вы использовали   -  person rawr    schedule 08.03.2017


Ответы (1)


Попробуйте использовать следующее regex :

(?:\b|\s+)(?:dutch|brown)(?:\s+|\b)

демонстрация регулярного выражения

р

library(stringi)

testStr <- c("dutch dutch brown", "brown ", "AAdutch", "dutchAA", "AAbrown",
             "brownAA", "hello")
stri_count_regex(testStr, "(?:\\b|\\s+)(?:dutch|brown)(?:\\s+|\\b)")  # 3 1 0 0 0 0 0
person m87    schedule 08.03.2017
comment
Просто небольшой дополнительный контекст: (?:pattern) – это группа без захвата, а \\b – это граница слова, которая совпадает в начале или конец слова, фактически не совпадая с какими-либо символами из слова. - person Matt Parker; 08.03.2017
comment
В любом случае, какова мотивация групп, не занимающихся захватом? - person Matt Parker; 08.03.2017