Tengo varias cadenas en forma aproximada:
[some text] [some number] [some more text]
Quiero extraer el texto en [algún número] usando las clases Java Regex.
Sé aproximadamente qué expresión regular quiero usar (aunque todas las sugerencias son bienvenidas). Lo que realmente me interesa son las llamadas de Java para tomar la cadena de expresiones regulares y usarla en los datos de origen para producir el valor de [algún número].
EDITAR: debo agregar que solo estoy interesado en un solo [algún número] (básicamente, la primera instancia). Las cadenas de origen son cortas y no voy a buscar múltiples ocurrencias de [algún número].
Respuestas:
Ejemplo completo:
Como está buscando el primer número, puede usar dicha expresión regular:
y
m.group(1)
te devolveré el primer número. Tenga en cuenta que los números con signo pueden contener un signo menos:fuente
Salida:
fuente
Allain básicamente tiene el código de Java, por lo que puede usarlo. Sin embargo, su expresión solo coincide si sus números solo están precedidos por una secuencia de caracteres de palabras.
debería poder encontrar la primera cadena de dígitos. No necesita especificar qué hay antes, si está seguro de que será la primera cadena de dígitos. Del mismo modo, no sirve de nada especificar qué hay después, a menos que lo desee. Si solo desea el número y está seguro de que será la primera cadena de uno o más dígitos, entonces eso es todo lo que necesita.
Si espera que esté compensado por espacios, hará que sea aún más claro especificar
podría ser mejor.
Si necesita las tres partes, esto hará:
EDITAR Las expresiones dadas por Allain y Jack sugieren que debe especificar algún subconjunto de no dígitos para capturar dígitos . Si le dice al motor de expresiones regulares que está buscando
\d
, ignorará todo antes de los dígitos. Si la expresión de J o A se ajusta a su patrón, toda la coincidencia es igual a la cadena de entrada . Y no hay razón para especificarlo. Probablemente ralentiza un partido limpio, si no se ignora por completo.fuente
Además de Pattern , la clase Java String también tiene varios métodos que pueden funcionar con expresiones regulares, en su caso el código será:
donde
\\D
es un carácter sin dígitos.fuente
En Java 1.4 y superior:
fuente
Esta función recopila todas las secuencias coincidentes de la cadena. En este ejemplo, toma todas las direcciones de correo electrónico de la cadena.
Para
message = "[email protected], <[email protected]>>>> [email protected]"
ello creará la Lista de 3 elementos.fuente
Intenta hacer algo como esto:
fuente
.+
codiciosamente consume caracteres,\d+
solo captura los"3"
de"123"
. Además, dentro de los literales de cadena, debe escapar de la barra diagonal inversa (su ejemplo no se compilará).Solución simple
Solución en una clase de utilidad
fuente
Mira, puedes hacerlo usando StringTokenizer
Dado que estamos tomando estos datos numéricos en tres variables diferentes, podemos usar estos datos en cualquier parte del código (para su uso posterior)
fuente
¿Qué tal
[^\\d]*([0-9]+[\\s]*[.,]{0,1}[\\s]*[0-9]*).*
si creo que se encargaría de los números con parte fraccionaria? Incluí espacios en blanco e incluí,
como posible separador. Estoy tratando de obtener los números de una cadena que incluye flotantes y teniendo en cuenta que el usuario puede cometer un error e incluir espacios en blanco al escribir el número.fuente
A veces puede usar el método simple .split ("REGEXP") disponible en java.lang.String. Por ejemplo:
fuente
fuente
si estás leyendo un archivo, esto puede ayudarte
fuente