Ich stoße nur auf ein Regex-Muster und seine passenden Muster-Strings, aber ich bin verwirrt über eines der übereinstimmenden Muster
Target: .50 1.50 0.50 10.50 00.50 1.555
Pattern: (0|[1-9]d*).dd
Matches with: (4,7:1.50)(9,12:0.50)(14,18:10.50)(21,24:0.50)(26,29:1.55)
Was ich aus dem Muster ableite, ist zwei Ziffern nach der Dezimalstelle und vor der Dezimalstelle eine Gruppe, in der die erste Ziffer entweder 0 oder irgendeine Ziffer zwischen 1 und 9 ist, gefolgt von einer leeren Zeichenfolge oder einer beliebigen Ziffernfolge ...
Ich denke im letzten Match sollte es 00.50 sein.
Was vermisse ich??
Antworten:
1 für die Antwort № 1Ich denke im letzten Match sollte es 00.50 sein.
Was vermisse ich??
Nein, dieser Teil deiner Regex (0|[1-9]d*).
kann als neu geschrieben werden (0.|[1-9]d*.)
, so kann es nur akzeptieren
- ein
0
und.
ODER
[1-9]d*
und.
Wenn Sie möchten, dass viele Nullen vor dem Punkt verwendet werden
(0+|[1-9]d*).dd
^--one or more zeroes
2 für die Antwort № 2
Ändern Sie einfach Ihr Regex-Muster zu
(00?|[1-9]d*).dd
Wenn Sie entweder eine oder zwei Nullen vor dem Dezimalzeichen zulassen möchten. Der Grund, warum Ihr aktueller Regex nur einen Teil davon erfasst, ist, dass der |
sagt entweder eine Null vorher einfangen .
oder erfassen Sie eine Zahl beliebiger Länge, die nicht mit einer Null beginnt (weil die Klasse [1-9]
schließt es aus).
1 für die Antwort № 3
(0|[1-9]d*).dd
^^
Dein Muster sagt Übereinstimmung 0 or any digit from 1 to 9 and then as many
.Das Ergebnis ist korrekt, da Sie keine Anker oder Wortgrenzen zur Verfügung gestellt haben, um partielle Übereinstimmungen zu verhindern
b(0|[1-9]d*).ddb
um nur richtige Übereinstimmungen zu machen.