2010-11-15 21 views
10

Puede alguien ayudarme a construir esta expresión regular por favor ...expresión regular para extraer los números de una cadena

Dadas las siguientes cadenas ...

  • "Abril de widgets (123 menos 456 piñones)"
  • "que los widgets (789 menos 012 piñones)"

que necesitan una expresión regular que va a extraer los dos números a partir del texto. El nombre del mes variará. No se espera que los corchetes, el texto de "widgets menos" y "piñones" cambien entre las cadenas, sin embargo, sería muy útil si también se pudiera variar este texto.

Gracias de antemano.

Respuesta

27

si se sabe con certeza que sólo van a ser 2 lugares donde se tiene una lista de dígitos en la cadena y que es lo único que se va a tirar a cabo, entonces debería ser capaz de utilizar simplemente

\d+ 
+0

¡Me la ganaste! La expresión regular anterior, cuando se aplica globalmente a toda la cadena (que depende de la implementación para que el OP tenga que identificarnos con el idioma) extraerá los números e ignorará el resto. –

+1

Por ejemplo, en ruby ​​sería 'matches = string.scan (/ \ d + /)' –

+0

Mis disculpas, estoy usando la implementación de .NET. –

23
^\s*(\w+)\s*\(\s*(\d+)\D+(\d+)\D+\)\s*$ 

debería funcionar. Después de la coincidencia, la referencia inversa 1 contendrá el mes, la referencia inversa 2 contendrá el primer número y la referencia inversa 3 el segundo número.

Explicación:

^  # start of string 
\s* # optional whitespace 
(\w+) # one or more alphanumeric characters, capture the match 
\s* # optional whitespace 
\( # a (
\s* # optional whitespace 
(\d+) # a number, capture the match 
\D+ # one or more non-digits 
(\d+) # a number, capture the match 
\D+ # one or more non-digits 
\) # a) 
\s* # optional whitespace 
$  # end of string 
+2

+1 para la explicación, pero tengo que dar la respuesta correcta a Seattle Leonard ya que es muy simple. –

+0

Buena explicación de su solución – itsmatt

2

podría utilizar algo como:

[^0-9]+([0-9]+)[^0-9]+([0-9]+).+

A continuación, obtenga el primer y el segundo grupo de captura.

Cuestiones relacionadas