Полное совпадение слов с использованием grepl в R
Рассмотрим следующий пример:
> testLines <- c("I don't want to match this","This is what I want to match")
> grepl('is',testLines)
> [1] TRUE TRUE
Однако я хочу только совместить "is", когда он стоит один как одно слово. Из чтения немного документации perl казалось, что способ сделать это с помощью \b, привязки, которая может быть использована для определения того, что происходит до и после patter, то есть \bword\b соответствует "слову", но не "мечу" ". Поэтому я попробовал следующий пример: с использованием синтаксиса Perl, установленного в" TRUE":
> grepl('\bis\b',testLines,perl=TRUE)
> [1] FALSE FALSE
Результат, который я ищу, - FALSE TRUE
.
Ответы
Ответ 1
"\ <" это еще одна escape-последовательность для начала слова, а "\ > " - это конец.
В строках R вам нужно удвоить обратную косую черту, так:
> grepl("\\<is\\>", c("this", "who is it?", "is it?", "it is!", "iso"))
[1] FALSE TRUE TRUE TRUE FALSE
Обратите внимание, что это соответствует "is!" но не "iso".
Ответ 2
вам нужно выполнить двойное экранирование, чтобы передать escape в regex:
> grepl("\\bis\\b",testLines)
[1] FALSE TRUE
Ответ 3
Очень упрощенно, совпадение в ведущем пространстве:
testLines <- c("I don't want to match this","This is what I want to match")
grepl(' is',testLines)
[1] FALSE TRUE
Там гораздо больше, чем это для регулярных выражений, но по существу шаблон должен быть более конкретным. То, что вам понадобится в более общих случаях, - огромная тема. Просмотреть? Regex
Другие возможности, которые будут работать для этого примера:
grepl(' is ',testLines)
[1] FALSE TRUE
grepl('\\sis',testLines)
[1] FALSE TRUE
grepl('\\sis\\s',testLines)
[1] FALSE TRUE