R регулярное выражение соответствует целому слову с учетом пунктуации - PullRequest
1 голос
/ 05 октября 2019

Я нахожусь в R. Я хочу сопоставить целые слова в тексте, с учетом пунктуации . Пример:

to_match = c('eye','nose')
text1 = 'blah blahblah eye-to-eye blah'
text2 = 'blah blahblah eye blah'

Я бы хотел, чтобы eye было сопоставлено в text2, но не в text1.

То есть команда:

to_match[sapply(paste0('\\<',to_match,'\\>'),grepl,text1)]

должен вернуть character(0). Но сейчас он возвращает eye.

Я также пытался с '\\b' вместо '\\<', но безуспешно.

1 Ответ

2 голосов
/ 05 октября 2019

Использование

to_match[sapply(paste0('(?:\\s|^)',to_match,'(?:\\s|$)'),grepl,text1)]

Дело в том, что границы слов совпадают между словом и несловными символами, поэтому у вас есть совпадение в eye-to-eye. Вы хотите совпадать только между началом или концом строки и пробелом.

В регулярном выражении TRE это лучше делать с группами, так как эта библиотека регулярных выражений не поддерживает обходные пути, и вам просто нужно проверить строку на предмет совпадения с одним шаблоном, чтобы получить значение true или false.

Группа без захвата (?:\s|^) соответствует любому пробелу или началу строки, а (?:\s|$) соответствует пробелу или концу строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...