2016-11-16 1 views
2

Ich brauche Cent Wert ab dem nächsten möglichen Werten (beiden Punkte und Komma sein könnten Tausendertrennzeichen) unter Verwendung von Java regex zu extrahieren:Regex Cent Wert von beliebiger Währung zu extrahieren Formatierung

$123,456.78 
123,456.78 dollars 
123,456.78 

ich teilweise Lösung gearbeitet habe:

Das Problem mit meiner Lösung, dass es nicht im Fall "123,456.78" funktioniert, wenn die letzte Ziffer das Ende der Zeichenfolge ist. Wie kann ich mit diesem Fall umgehen?

http://java-regex-tester.appspot.com/regex/6af08221-63cb-4c5b-a865-c86fe5e825ff

+0

Sie wollen also 78 als Ausgabe? – TheLostMind

+0

Machen Sie das '\ D' optional oder noch besser ändern Sie Ihre Regex in etwas wie' (?: \ D +,) * (?: \ D +) \. (\ D +) ', dh die gesamte Zeichenfolge übereinstimmen und die Zahlen danach extrahieren der Dezimalpunkt. – Thomas

+1

Versuchen Sie '[.,] (\ D {2}) (?! \ D)' –

Antwort

1

Beachten Sie, dass \D ein Zeichen erfordert, das keine Ziffer nach den ,/. und 2 Stellen in Ihrem Muster. Wenn Sie sicherstellen möchten, dass es keine Stelle ohne Verbrauch (erfordert es) verwenden, um eine negative Vorschau:

[.,](\d{2})(?!\d) 
      ^^^^^^ 

die regex demo See.

Einzelheiten:

  • [.,] - ein Punkt oder Komma (Dezimaltrennzeichen in verschiedenen Ländern zu unterstützen, nicht nur in den USA)
  • (\d{2}) - Gruppe 1 (da die \d{2} erscheint innerhalb einer Erfassungsgruppe (...), können Sie auf den Wert zugreifen mit Matcher.group(1))
  • (?!\d) - ein negativer Lookahead erfordert das Fehlen einer Ziffer unmittelbar nach den letzten 2 Ziffern.

Weitere Informationen über how negative lookahead works.

Verwandte Themen