RegEx für beide, Integer und Float

7

Ich brauche eine Regex, um sowohl Integer-Werte als auch Float-Zahlen zu finden (während Float-Zahlen ein "." als Trennzeichen haben). Diese Zahlen befinden sich immer in einer Klammer und können ein vorangestelltes "+" haben.

Was sollte gelten:

  • (1.0)
  • (1)
  • (9.9)
  • (10000000)
  • (+ 15)

Was sollte ungültig sein:

  • 1.0 --- weil keine Klammer
  • 5 --- weil keine Klammer
  • (1,5) --- becaue "," statt "."
  • (a) --- wegen nicht einer Nummer
  • (1 5) --- wegen nicht nur einer Nummer
  • (1 + 5) --- weil ... naja ... nur das Muster versagt
  • [5] --- weil falsche Klammern
user2015253 27.01.2013, 18:16
quelle

2 Antworten

15

Dies sollte auf den meisten Perl wie Regex-Engines funktionieren:

%Vor%     
ennuikiller 27.01.2013, 18:20
quelle
9

Leider ist die aktuell akzeptierte Antwort fehlerhaft (sie wird "1a5" entsprechen, aber nicht ".5"). Also habe ich beschlossen, meine eigene Regex zu schreiben, sowie ein billiges Perl-Skript, um es zu testen.

Anforderungen

Der Regex passt zu einer Ganzzahl oder Gleitkommazahl mit einem vorangestellten Vorzeichen. Ich interessiere mich nicht für E-Notation, also ignorierte ich es.
nhahtdh erwähnt "(5.) und (.6)": "5." sieht nicht richtig für mich aus, die nachlaufende Periode hat keinen Zweck. Jedoch ist ".6" tatsächlich gültig, da die führende Periode einen positiven Wert & lt; 1 (d.h. es ist kurz für "0.6").
Das anfängliche (?=.) soll sicherstellen, dass eine leere Zeichenfolge nicht übereinstimmt.
Als Bonus habe ich verschachtelte Gruppen verwendet, so dass Sie die verschiedenen Teile der Zahl leicht extrahieren können:

  • $ 1 = Die ganze Zahl
  • $ 2 = Ganzzahliger Teil
  • $ 3 = Bruchteil mit führender Periode
  • $ 4 = Bruchteil

Regex

%Vor%

Test

%Vor%

Bitte lassen Sie es mich wissen, wenn ich etwas übersehen habe.

Zusatz

Klammern zu erzwingen ist trivial, wickle das Ganze einfach in ESCAPED-Klammern:

%Vor%     
basic6 14.04.2014 12:06
quelle

Tags und Links