varios utilizar usar texto regulares patrones para palabra extendidas expresiones exacta comando buscar analizar regex string r grep

regex - utilizar - Emparejamiento parcial de cadenas con grep y expresiones regulares



usar grep (2)

Tengo un vector de tres cadenas de caracteres, y estoy tratando de escribir un comando que encontrará qué miembros del vector tienen una letra particular como segundo carácter.

Como ejemplo, digamos que tengo este vector de picaduras de 3 letras ...

example = c("AWA","WOO","AZW","WWP")

Puedo usar grepl y glob2rx para buscar cadenas con W como primer o último carácter.

> grepl(glob2rx("W*"),example) [1] FALSE TRUE FALSE TRUE > grepl(glob2rx("*W"),example) [1] FALSE FALSE TRUE FALSE

Sin embargo, no obtengo el resultado correcto cuando intento usarlo con glob2rx(*W*)

> grepl(glob2rx("*W*"),example) [1] TRUE TRUE TRUE TRUE

Estoy seguro de que mi comprensión de las expresiones regulares es deficiente, sin embargo, este parece ser un problema bastante sencillo y parece que no puedo encontrar la solución. ¡Realmente me encantaría recibir ayuda!

Para referencia futura, también me gustaría saber si puedo extender esto al caso donde tengo cadenas más largas. Supongamos que tengo cadenas de 5 caracteres de longitud, ¿podría usar grepl de forma tal que devuelva cadenas donde W es el tercer personaje?


Hubiera pensado que esta era la forma de la expresión regular:

> grepl("^.W",example) [1] TRUE FALSE FALSE TRUE

Si quería una posición particular que está preespecificada, entonces:

> grepl("^.{1}W",example) [1] TRUE FALSE FALSE TRUE

Esto permitiría el cálculo programático:

pos= 2 n=pos-1 grepl(paste0("^.{",n,"}W"),example) [1] TRUE FALSE FALSE TRUE


Si tiene cadenas de 3 caracteres y necesita verificar el segundo carácter, puede probar la subcadena apropiada en lugar de usar expresiones regulares:

example = c("AWA","WOO","AZW","WWP") substr(example, 2, 2) == "W" # [1] TRUE FALSE FALSE TRUE