Ich versuche, einen regulären Ausdruck für übereinstimmende Längen- / Breitengradkoordinaten zu erstellen. Um eine Zahl mit doppelter Genauigkeit abzugleichen, habe ich (\-?\d+(\.\d+)?)
versucht, diese zu einem einzigen Ausdruck zu kombinieren:
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
Ich habe erwartet, dass dies mit einem Doppel, einem Komma, vielleicht etwas Leerzeichen und einem weiteren Doppel übereinstimmt, aber es scheint nicht zu funktionieren. Insbesondere funktioniert es nur, wenn KEIN Speicherplatz vorhanden ist, nicht einer oder mehrere. Was habe ich falsch gemacht?
Dieser Wert entspricht genau den Breiten- und Längengraden, die in den richtigen Bereich fallen:
Streichhölzer
Passt nicht zusammen
quelle
?:
Syntax der nicht erfassenden Gruppe sowie die Erfassungspolarität verwendet habe(^[-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))$
Ich benutze diese (Dezimalformat mit 6 Dezimalstellen):
Breite
Längengrad
Hier ist ein Kern, der beide, auch hier berichteten, auf einfachen Zugriff testet. Es ist ein Java TestNG-Test. Sie benötigen Slf4j, Hamcrest und Lombok, um es auszuführen:
quelle
Tatsächlich ist Alix Axel, oberhalb von Regex, in Bezug auf Breiten- und Längengrade falsch.
Breitengradmessungen reichen von –90 ° bis + 90 °. Längengradmessungen reichen von –180 ° bis + 180 °
Der unten angegebene reguläre Ausdruck wird also genauer validiert.
Meiner Meinung nach sollte niemand den Dezimalpunkt in Längen- und Breitengrad einschränken.
ODER für Ziel C.
quelle
99
fürLatitude
, während99
außerhalb des Bereichs von-90, +90
und so ungültig ist.Regex-Aufschlüsselung:
-?
# negative Werte akzeptieren^
# Beginn der Zeichenfolge[0-9]{1,3}
# Übereinstimmung mit 1-3 Ziffern (dh 0-999)(?:
# Versuchen Sie zu passen ...\.
# ein Dezimalpunkt[0-9]{1,10}
# gefolgt von einer bis 10 Ziffern (dh 0-9999999999))?
# ... optional$
# Ende der Zeichenfolgequelle
Versuche dies:
Schau es dir an unter:
http://regexpal.com/
Fügen Sie den Ausdruck in das obere Feld ein und fügen Sie dann Folgendes in das untere Feld ein:
Regex-Aufschlüsselung:
Dies beschränkt sich NICHT auf diesen Bereich:
Stattdessen beschränkt es sich einfach auf diesen Bereich:
Es geht aber hauptsächlich darum, jedes Stück des Ausdrucks zu zerlegen.
quelle
Hier ist eine strengere Version:
-90
-+90
-180
-+180
quelle
Python:
Breite:
result = re.match("^[+-]?((90\.?0*$)|(([0-8]?[0-9])\.?[0-9]*$))", '-90.00001')
Längengrad:
result = re.match("^[+-]?((180\.?0*$)|(((1[0-7][0-9])|([0-9]{0,2}))\.?[0-9]*$))", '-0.0000')
Latitude sollte im Beispiel fehlschlagen.
quelle
@ macro-ferrari Ich habe einen Weg gefunden, es zu verkürzen, und ohne vorausschauend angesichts all der jüngsten Gespräche über Regex-Engines
quelle
Ich glaube, Sie verwenden \ w (Wortzeichen), wo Sie \ s (Leerzeichen) verwenden sollten. Wortzeichen bestehen normalerweise aus [A-Za-z0-9_], sodass Ihr Leerzeichen ausgeschlossen wird, das dann nicht mit dem optionalen Minuszeichen oder einer Ziffer übereinstimmt.
quelle
Dies würde für ein Format wie das folgende funktionieren: 31 ͦ 37.4 'E.
quelle
Rubin
Längengrad -179.99999999..180
Breitengrad -89.99999999..90
quelle
Eine vollständige und einfache Methode in Ziel C zur Überprüfung des korrekten Musters auf Längen- und Breitengrad ist:
wobei SearchedString ist der Eingang , dass der Benutzer in dem jeweiligen Kästchen ein würde.
quelle
PHP
Hier ist die PHP-Version (Eingabewerte sind:
$latitude
und$longitude
):quelle
Sie können dies versuchen:
quelle
Versuche dies:
quelle
Versuche dies:
quelle