Полное совпадение слов с использованием 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