2012-07-23 12 views
7

tengo cadenas que son letras y números mixtos:R expresiones regulares gsub letras y números separados

"The sample is 22mg" 

me gustaría dividir cadenas donde un número es seguida inmediatamente por carta como esta:

"The sample is 22 mg" 

he intentado esto:

gsub('[0-9]+[[aA-zZ]]', '[0-9]+ [[aA-zZ]]', 'This is a test 22mg') 

pero no estoy consiguiendo los resultados deseados.

¿Alguna sugerencia?

Respuesta

14

Debe usar la captura de paréntesis en la expresión regular y las referencias de grupo en la sustitución. Por ejemplo:

gsub('([0-9])([[:alpha:]])', '\\1 \\2', 'This is a test 22mg') 

No hay nada específico de R aquí; la ayuda de R para regex y gsub debe ser de alguna utilidad.

10

Usted necesita backreferencing:

test <- "The sample is 22mg" 
> gsub("([0-9])([a-zA-Z])","\\1 \\2",test) 
[1] "The sample is 22 mg" 

Cualquier cosa en paréntesis, se recordó. Luego se accede por \ 1 (para la primera entidad en parens), \ 2, etc. La primera barra invertida escapa a la interpretación de la barra invertida en R para que pase al analizador de expresiones regulares.

Cuestiones relacionadas