Estoy intentando extraer un número de una cadena.
Y haz algo como [0-9]+
en la cuerda "aaa12xxx"
y consigue "12"
.
Pensé que sería algo como:
> grep("[0-9]+", "aaa12xxx", value=TRUE)
[1] "aaa12xxx"
Y luego pensé ...
> sub("[0-9]+", "\\1", "aaa12xxx")
[1] "aaaxxx"
Pero obtuve alguna forma de respuesta haciendo:
> sub("[0-9]+", "ARGH!", "aaa12xxx")
[1] "aaaARGH!xxx"
Hay un pequeño detalle que me falta.
?str_extract
vi que lastr_extract_all
vida era buena nuevamente.Probablemente sea un poco apresurado decir ' ignorar las funciones estándar ', el archivo de ayuda
?gsub
incluso para referencias específicas en 'Ver también':Entonces esto funcionará, y es bastante simple:
fuente
Tal vez
fuente
Puede usar la coincidencia perezosa de las expresiones regulares PERL:
En este caso, intentar sustituir los que no son dígitos dará lugar a un error.
fuente
Una forma sería esta:
Ahora, observe que regexpr le da los índices inicial y final de la cadena:
Entonces puedes usar esa información con la función substr
Estoy seguro de que hay una forma más elegante de hacer esto, pero esta fue la forma más rápida que pude encontrar. Alternativamente, puede usar sub / gsub para eliminar lo que no desea y dejar lo que sí desea.
fuente
Utilice la captura de paréntesis en la expresión regular y referencias de grupo en el reemplazo. Todo lo que esté entre paréntesis se recuerda. Luego, se accede a ellos mediante \ 2, el primer elemento. La primera barra invertida escapa a la interpretación de la barra invertida en R para que se pase al analizador de expresiones regulares.
fuente
Usando strapply en el paquete gsubfn. strapply es como aplicar en que los argumentos son objeto, modificador y función, excepto que el objeto es un vector de cadenas (en lugar de una matriz) y el modificador es una expresión regular (en lugar de un margen):
Esto dice que coincida con uno o más dígitos (\ d +) en cada componente de x pasando cada coincidencia a través de as.numeric. Devuelve una lista cuyos componentes son vectores de coincidencias de los componentes respectivos de x. Al observar la salida, vemos que el primer componente de x tiene una coincidencia que es 13 y el segundo componente de x tiene dos coincidencias que son 12 y 34. Consulte http://gsubfn.googlecode.com para obtener más información.
fuente
Otra solución:
fuente
Una diferencia importante entre estos enfoques es el comportamiento con cualquier no coincidencia. Por ejemplo, es posible que el método regmatches no devuelva una cadena de la misma longitud que la entrada si no hay una coincidencia en todas las posiciones
fuente
Una solución para esta pregunta
[[: dígito:]] : dígito [0-9]
{1,} : coincide al menos 1 veces
fuente
Usando el paquete unglue haríamos lo siguiente:
Creado el 2019-11-06 por el paquete reprex (v0.3.0)
Utilice el
convert
argumento para convertir a un número automáticamente:fuente
Puede escribir sus funciones de expresiones regulares con C ++, compilarlas en una DLL y llamarlas desde R.
llamar a R como
fuente