he un vector lleno de cuerdas de la siguiente formato: <year1><year2><id1><id2>
R Expresión regular de búsqueda hacia atrás
los primeros valores del vector se parece a esto:
199719982001
199719982002
199719982003
199719982003
Para la primera entrada tenemos: año 1 = 1997, año2 = 1998, id1 = 2, id2 = 001.
Quiero escribir una expresión regular que extraiga year1, id1 y los dígitos de id2 que no son cero. Así que para la primera entrada de la expresión regular debe de salida: 199721.
he intentado hacer esto con el paquete stringr, y ha creado la siguiente expresión regular:
"^\\d{4}|\\d{1}(?<=\\d{3}$)"
de sacar año1 e id1, sin embargo cuando se utiliza el mira detrás, me sale un error de "expresión regular inválida". Esto es un poco desconcertante para mí, ¿R no puede manejar lookaheads y mirar detrás?
mira la página de ayuda 'regex'. Lookbehind es compatible con 'perl = TRUE'. Entonces 'regexp ("^\\ d {4} | \\ d {1} (? <= \\ d {3} $) ", s)' no arroja un error, pero no selecciona lo que desea. – mpiktas
¡Gracias por el consejo! Sabía que la expresión regular no captaría todo, solo estaba experimentando un poco, y me pillé cuando recibí un mensaje de "expresión regular no válida". –
Con 'strapply' en gsubfn esta expresión regular funciona y no requiere lookahead o lookbehind:' L <- c ("199719982001", "199719982002", "199719982003", "199719982003"); biblioteca (gsubfn); strapply (L, "^ (....) .... (.) 0 * (. *)", c, simplify = TRUE) ' –