Wie schreibt man einen regulären Ausdruck, der einem numerischen Bereich von 0 oder 000 bis 180 entspricht?Regulärer Ausdruck: Numerischer Bereich
Antwort
Der einfachste Weg wäre, die Zeichenfolge als Zahl zu analysieren und nach der Zahl zu suchen, die im richtigen Bereich liegt.
Um dies zu tun mit reinen regex Sie das Muster identifizieren müssen und es schreiben:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
Dies hat drei Alternativen: ein für ein- und zweistellige Zahlen (so dass führende Nullen), wobei jeder Ziffer kann alles von 0 bis 9 sein. Und eine andere, die angibt, welcher Bereich von Ziffern für jede Ziffer in einer dreistelligen Zahl erlaubt ist. In diesem Fall bedeutet dies, dass die erste Ziffer 1 sein muss, die zweite Ziffer zwischen 0 und 7 und die letzte Ziffer alles. Die dritte Alternative ist nur für die Nummer 180, die anderswo nicht gut in das Muster passte.
könnte ein einfacher Ansatz
^(0{0,2}[0-9]|0?[1-9][0-9]|1[0-7][0-9]|180)$
sein, die für jeden kniffligen Zahlenbereich wechselt nur sein könnte dort.
Das macht den Trick.Wie Sie auch erwähnt haben, muss es dreistellige Zahlen wie 001, 010, 012 usw. entsprechen, was das tut.Geschätzte – Morten
Versuchen Sie folgendes:
^(0|[1-9][0-9]?|1[0-7][0-9]|180)$
Weder für eine dreifache '000'. –
@Ionut G. Stan: Ich denke, das ist nur die Alternative, wenn nur Zahlen ohne führende Nullen zu schwierig sind. – Gumbo
Ich glaube nicht, regex die richtige Wahl für diese ist. Haben Sie versucht, den Wert zu analysieren? Wenn Sie Regex verwenden müssen, würde ich \d{1,3}
die Zeichenfolge parsen und dann die Nummer in Code überprüfen.
+1 Die anderen Antworten hatten jeweils mindestens einen Fehler, deshalb lohnt es sich nicht, RE für diese Aufgaben zu verwenden. – soulmerge
Zwei Fehler sogar :(aber ja, ich stimme grundsätzlich zu. – Joey
In jedem anderen Kontext könnte es einfacher gewesen sein, einen Wert zu parsen, aber es wird in einem größeren Regex verwendet, der eine Koordinate wie 54 ° passiert. 11'56.234 '' – Morten
I modifizierte Gumbos:
^(00?0?|0?[1-9][0-9]?|1[0-7][0-9]|180)$
bereite.
, wenn Sie nicht über negative Zahlen egal
>> r = /\b(0?\d?\d|1[0-7]\d|180)\b/
=> /\b(0?\d?\d|1[0-7]\d|180)\b/
>> (0..200).map {|i| i.to_s =~ r }
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
>>
Es ist ein Online-Dienstprogramm diese at UtilityMill.com Für Ihre Frage zu generieren, diese zurückgibt:
0*([0-9]{1,2}|1[0-7][0-9]|180)
Als allgemeine Regel würde ich einer Regex nicht vertrauen geschrieben von einem Programm Meine Erfahrungen mit RegexBuddy haben gezeigt, dass es nicht mein "Freund" ist, noch kann es anständige reguläre Ausdrücke schreiben. –
Dieser ist co aber richtig. Es erlaubt zwar beliebig viele führende Nullen. – Joey
@ paul-mcguire ist es möglich, Kommas zu ignorieren, wenn der Benutzer versucht, Werte wie 1.000 einzugeben? – Vyache
Ich würde die Bereiche aufgliedern so dass es leicht in separaten individuellen Regex angegeben werden kann:
^(0|0[0-9][0-9]|1[0-7][0-9]|180)$
Oder was in den Menschen lesbaren Begriffen ist das gleiche:
0 000-099 100-179 180
Wenn Sie den zweistelligen Bereich benötigen, ist es nur eine Frage der [0-9][0-9]
auf die regex hinzuzufügen.
Wenn Sie Probleme bei der Arbeit mit Regex haben, versuchen Sie, sie so zu spezifizieren, dass die Regex-Operatoren so klar wie möglich sind. Normalerweise gibt es eine Möglichkeit, sie so darzustellen, dass ihre Funktion viel klarer wird. speziell, wenn die Sprache, in der Sie dies tun, Sie Teile der Regex-Spezifikation in separate Spalten und Zeilen trennen können.
Sie haben die Ziffern 1 bis 9 vergessen. –
Nein, ich habe gerade "0 oder 000 bis 180" gelesen und interpretiert: 0 als eine Ziffer oder der Bereich 000 bis 180 als drei Ziffern. Als ich sagte: "Wenn Sie die zweistellige Reichweite brauchen ..." hätte ich auch den einstelligen Bereich erwähnen sollen, damit sind Sie richtig. – lcv
Meine zwei Cent:
Wer eine Antwort auf diese Frage Entsendung sollten ihre regex mit mindestens die folgenden Eingänge haben getestet:
entsprechen sollten: 0, 00, 000, 5, 05, 005, 95, 095, 180
nicht überein Sollte: 0000, 0095, 181, 190
denke ich, Johannes Rössel was schrieb ungefähr so gut ist, wie Sie bekommen:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
PowerShell hilft beim Validieren: '-20..200 |% {$ _;" {0:00} "- f $ _;" {0: 000} "- f $ _} |% {if ($ _- match "^ (0? [0-9] {1,2} | 1 [0-7] [0-9] | 180) $") {Schreib-Host -fore grün $ _} else {Schreib-Host - vor rot $ _}} ' – Joey
Die kürzlich veröffentlichte rgxg
Kommandozeilen-Tool erzeugt reguläre Ausdrücke, die einen bestimmten Nummernbereich entsprechen:
$ rgxg range -Z 0 180
(180|1[0-7][0-9]|0?[0-9]{1,2})
Weitere Informationen finden Sie http://rgxg.sf.net.
Sie können die regelmäßigen unten verwenden Ausdruck
^([0-1]?[0-7]?[0-9])|180$
Wenn Sie es genau drei Ziffern brauchen, können Sie entfernen? Zeichen –
- 1. Regulärer Ausdruck - Spezifischer Bereich
- 2. Regulärer Ausdruck Literal-Text-Bereich
- 3. Regulärer Ausdruck - Bereich (2-16)?
- 4. Übereinstimmung mit regulärer Ausdruck
- 5. Regulärer Ausdruck
- 6. Regulärer Ausdruck
- 7. JavaScript regulärer Ausdruck (Seitenbereichsüberprüfung)
- 8. Regulärer Ausdruck für Ziffern in einem bestimmten Bereich
- 9. Regulärer Ausdruck „leeren Bereich in char class Fehler“
- 10. regulärer Ausdruck nur Zahlen in Bereich von 1-20
- 11. Regulärer Ausdruck für IP-Bereich in Ansible Playbooks für Gruppierung
- 12. Regulärer Ausdruck - Wiederholungsgruppen
- 13. Regulärer Ausdruck Problem
- 14. Regulärer Ausdruck Problem
- 15. Regulärer Ausdruck FS00000
- 16. Regulärer Ausdruck ersetzen
- 17. Clojure mehrzeilige regulärer Ausdruck
- 18. Regulärer Ausdruck Hexstring
- 19. Regulärer Ausdruck gegenüber
- 20. Regulärer Ausdruck C#
- 21. Regulärer Ausdruck für Bankkontonummer?
- 22. Komplexer regulärer Ausdruck
- 23. Python regulärer Ausdruck sub
- 24. Regulärer Ausdruck "UND"
- 25. Regulärer Ausdruck in C
- 26. Python string.replace regulärer Ausdruck
- 27. Regulärer Ausdruck 12-Stunden-
- 28. Regulärer Ausdruck Benutzereingabe Java
- 29. regulärer Ausdruck für „def“
- 30. htaccess 301 regulärer Ausdruck
http://www.regular-expressions.info/numericranges.html ist ein sehr nützlicher Artikel – Bergi
Ich glaube, Sie dieses Paket verwenden kann, 'https: // github.com/dimka665/range-regex'. Es unterstützt bereits negative Werte. Der aktuelle Code wird nicht aktualisiert. Sie müssen ihn daher von dieser Github-Ressource herunterladen. – swdev