Ich muss nur extrahieren 94.00
aus der Zeichenfolge unten.
Welchen Regex würde ich dazu benutzen? Meine aktuelle Regex von [^$]+$
kommt zurück $99.00 (176)
5 Easy Payments $94.00 $99.00 (176)
Antworten:
2 für die Antwort № 1Anscheinend möchten Sie diesen regulären Ausdruck verwenden:
$[d.]+
Dies entspricht allen Preisen, also abhängig von Ihrer Sprache, verwenden Sie die Funktion, um das erste Vorkommen zu erhalten. Dies wird jedoch auch etwas lächerlich aussehen $......
als Preis.
$[d]+.[d]+
passt nur die Preise im Formular an $123.456
mit einer beliebigen Anzahl von Ziffern.
^[^$]+$[d]+.[d]+
passt alles bis zur letzten Ziffer im Preis an. Dies ist in seinem aktuellen Zustand nutzlos, da es zurückkehrt 5 Easy Payments $94.00
für Ihre Testzeichenfolge.
^[^$]+($[d]+.[d]+)
wird der gleichen Sache wie oben entsprechen, aber Gruppe # 1 des regulären Ausdrucks wird der Preis sein $94.00
. Wenn Sie nur die Zahl selbst anpassen möchten, verschieben Sie die linke Klammer, so dass es wird ^[^$]+$([d]+.[d]+)
.
Das Problem ist, dass dies keine Treffer liefert, wenn irgendwo ein nichtpreisiges Dollarzeichen vor dem ersten gültigen Preis steht. Solange das kein Problem ist, dann ^[^$]+$([d]+.[d]+)
werde dir geben 94.00
für Capture-Gruppe 1.
1 für die Antwort № 2
Sie müssen einen Erfassungsmechanismus verwenden, wenn Sie keine normale Programmiermethode verwenden können, um die Anzahl der Übereinstimmungen zu steuern, die Sie erhalten:
/($d+(?:.d+)?)[sS]*/
Diese Regex findet die erste (weil jede Regex-Engine die Zeichenfolge von links nach rechts verarbeitet, zumindest standardmäßig) $
+1 or more digits
+an optional sequence of "." and 1 or more digits
, erfasst dieser Text in Gruppe 1 (mit ($d+(?:.d+)?)
) und dann Streichhölzer und verbraucht der ganze Rest der Saite mit [sS]*
(alle 0 oder mehr Zeichen).
Ihr Wert befindet sich in Gruppe 1: