/ / Regex für das erste Auftreten von Preis - Regex

Regex zum Finden des ersten Vorkommens von Preis - Regex

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 № 1

Anscheinend 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:

Bildbeschreibung hier eingeben