2017-02-02 3 views
1

У меня возникли проблемы с совпадением шаблона со строкой текста в R.Класс символов POSIX не работает в базе R regex

Я пытаюсь получить TRUE с grepl, если текст что-то вроде "lettersornumbersorspaces y lettersornumbersorspaces".

Я использую следующие regex:

([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+ 

При использовании regex следующим образом, чтобы получить адрес» «он работает в ожидании.

regex <- "([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+" 
address <- str_extract(fulltext, regex) 

Я вижу, что адрес - это текст, который мне нужен. Теперь, если я хочу использовать grepl, чтобы получить TRUE следующим образом:

grepl("([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+", address,ignore.case = TRUE) 

FALSE возвращается. Как это возможно? Я использую то же самое regex, чтобы получить TRUE. Я пробовал модификации параметров grepl, но не связанные с ними.

Пример текста: "26 de Marzo y Pareyra de la Luz"

Спасибо !!

+0

Классы символов POSIX должны быть внутри выражений скобок. '[: alnum:]' -> '[[: alnum:]]'. Кроме того, вы, похоже, хотите использовать шаблон PCRE с 'grepl', добавьте' perl = TRUE'. –

+0

Это сработало! Благодаря!! =) –

+0

Рад, что это сработало для вас. Пожалуйста, подумайте о принятии ответа (см. [Как принять ответы SO] (http: //meta.stackexchange.ком/вопросы/5234/как-делает-прием-ан-ответ-работа)). –

ответ

2

Хотя stringr СИС регулярных выражений поддерживает двигатели босые классы POSIX-символа в шаблоне, в базе R регулярных выражений вкусов (как PCRE (perl=TRUE) и TRE), классы символов POSIX должен быть внутри скобок выражения. [:alnum:] ->[[:alnum:]].

x <- c("AZaz09 y AZaz09", "ĄŻaz09 y AZŁł09", "26 de Marzo y Pareyra de la Luz") 
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x) 
## => [1] TRUE TRUE TRUE 
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x, perl=TRUE) 
## => [1] TRUE TRUE TRUE 

См online demo

При использовании [:alnum:] в одиночку, это простое выражение кронштейн, который соответствует одному символу, а :, a, l, n, u, m. Подробнее

шаблон:

  • [[:alnum:][:blank:]]+ - 1+ буквенно-цифровые символы или горизонтальные пробельные
  • [[:blank:]] - 1 горизонтальные пробельные символы
  • [yY] - либо y или Y
  • [[:blank:]] - 1 горизонтальный пробельные символы
  • [[:alnum:][:blank:]]+ - 1 + буквенно-цифровые или горизонтальные символы пробелов