/ / Regex - Übereinstimmung mit einer beliebigen Anzahl von Werten (Rubin) - Rubin, Regex

Regex - entspricht einer beliebigen Anzahl von Werten (Ruby) - Ruby, Regex

Einige Beispieleingaben

Gewinnzahlen: 1 Gewinnzahlen: 1,2,3,4 Gewinnzahlen: 1,23, 28, 273, 191

Gewünschte Spiele

[1] [1,2,3,4] [1,23,28,273,191]

Es ist ein einfaches Muster, aber ich bin mir nicht wirklich sicher, wie ich alle Zahlen zusammenbringen soll.

winning numbers:s*(d+)s*(,s*(d+))*

Es stimmt jedoch nur mit der ersten (wie erwartet) und der letzten Zahl überein.

Ich verwende Rubin, also möchte ich abrufen könnenalle Übereinstimmungen in einem Array und geben es ab. Bei meinem aktuellen Regex stimmt es mit der letzten Zahl überein, aber es stimmt auch mit dem Komma überein, da es in den Klammern steht.

Ist meine Logik fehlerhaft? Oder drücke ich es nicht als Regex aus?
Ich benutze rubulär um meine Regex zu testen.

Antworten:

4 für die Antwort № 1

Sie können verwenden scan Methode, um alle Zahlen und dann zu finden map Sie werden in das Array konvertiert, wobei jedes mit Integer in eine Ganzzahl umgewandelt wird to_i

numbers = "1,23, 28,   273, 191"

numbers.scan(/d+/).map(&:to_i)
=> [1, 23, 28, 273, 191]

0 für die Antwort № 2

Die ursprüngliche Antwort funktioniert gut, aber ich bin immer besorgt, dass irgendwann jemand den Nachrichtentext so ändert, dass er eine Nummer enthält.

Hier "kann dies auf eine andere Weise geschehen:

2.3.0 :013 > def get_numbers(s)
2.3.0 :014?>   s.split(":").last.split(",").map(&:to_i)
2.3.0 :015?>   end
=> :get_numbers
2.3.0 :016 > get_numbers "winning numbers: 1,23, 28,   273, 191"
=> [1, 23, 28, 273, 191]

Dies beinhaltet natürlich auch die Annahme, dass in der Zeile immer genau 1 Doppelpunkt steht und der Beschreibungstext endet.