2010-11-15 6 views
10

Kann mir jemand helfen, diesen regulären Ausdruck konstruieren bitte ...Regulärer Ausdruck, um die Nummern aus einem String

Angesichts der folgenden Strings ...

  • "April (123 Widgets weniger 456 Ritzel)"
  • „Mai (789 Widgets weniger 012 Ritzel)“

ich brauche einen regulären Ausdruck, der die beiden Zahlen aus dem Text extrahieren. Der Monatsname wird variieren. Es ist nicht zu erwarten, dass sich der eckige Text, der Text "Widgets less" und der Text "Ritzel" zwischen den Strings ändern, aber es wäre wirklich nützlich, wenn dieser Text auch variiert werden könnte.

Vielen Dank im Voraus.

Antwort

27

, wenn Sie sicher wissen, dass es nur 2 Plätze sein werden, wo Sie eine Liste von Ziffern in der Zeichenfolge und das ist das einzige, was Sie ziehen wollen aus, dann sollten Sie einfach in der Lage sein

\d+ 
+0

Sie haben mich geschlagen! Die obige Regex wird, wenn sie global auf den gesamten String angewendet wird (was implementierungsabhängig ist, so dass das OP uns in die Sprache einweisen muss), die Zahlen extrahieren und den Rest ignorieren. –

+1

Zum Beispiel in Ruby wäre es 'Übereinstimmungen = string.scan (/ \ d + /)' –

+0

Entschuldigung, ich verwende die .NET-Implementierung. –

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

sollte funktionieren. Nach dem Match enthält Backreference 1 den Monat, Backreference 2 die erste Nummer und Backreference 3 die zweite Nummer.

Erläuterung:

^  # 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 für die Erklärung, aber ich muss die richtige Antwort auf Seattle Leonard geben, wie es so einfach ist. –

+0

Gute Erklärung für Ihre Lösung – itsmatt

2

verwenden Sie so etwas wie verwenden:

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

Dann erhalten Sie die erste und zweite Erfassung Gruppen.

Verwandte Themen