La clase de caracteres POSIX no funciona en la base R regex

Tengo algunos problemas para unir un patrón con una cadena de texto en R

grepl obtener TRUE con grepl cuando el texto es algo así como "lettersornumbersorspaces y lettersornumbersorspaces".

Estoy usando la siguiente regex :

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

Cuando se utiliza la regex siguiente manera para obtener la “dirección” funciona a la espera.

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

Veo que la dirección es el texto que necesito. Ahora, si quiero usar grepl para obtener un TRUE siguiente manera:

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

FALSE es devuelto ¿Cómo es esto posible? Estoy usando la misma regex para obtener TRUE . He intentado modificar los parámetros de grepl , pero grepl está relacionado con esto.

Un ejemplo de texto es: "26 de Marzo y Pareyra de la Luz"

¡¡Gracias!!

Aunque los motores de expresiones regulares ICU stringr admiten clases de caracteres POSIX desnudas en el patrón, en los sabores regex de base R (tanto PCRE ( perl=TRUE ) como TRE), las clases de caracteres POSIX deben estar dentro de las expresiones de corchetes . [: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 

Vea la demostración en línea

Cuando usa [:alnum:] solo, es una expresión de corchete simple que coincide con un solo carácter, a : a , l , n , u , m .

Detalles del patrón :

  • [[:alnum:][:blank:]]+ – 1+ símbolos alfanuméricos u horizontales en blanco
  • [[:blank:]] – 1 símbolos horizontales en blanco
  • [yY] – ya sea y o Y
  • [[:blank:]] – 1 símbolos horizontales en blanco
  • [[:alnum:][:blank:]]+ – 1+ símbolos alfanuméricos u horizontales en blanco
Intereting Posts