J'essaie de créer une expression régulière pour faire correspondre les coordonnées de latitude / longitude. Pour faire correspondre un nombre à double précision que j'ai utilisé (\-?\d+(\.\d+)?)
, et j'ai essayé de le combiner en une seule expression:
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
Je m'attendais à ce que cela corresponde à un double, une virgule, peut-être un espace et un autre double, mais cela ne semble pas fonctionner. Plus précisément, cela ne fonctionne que s'il n'y a PAS d'espace, pas un ou plusieurs. Qu'est ce que j'ai mal fait?
Celui-ci correspondra strictement aux valeurs de latitude et de longitude comprises dans la plage correcte:
Allumettes
Ne correspond pas
la source
?:
syntaxe de groupe non capturant, ainsi que la polarité de capture(^[-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))$
J'utilise ceux-ci (format décimal, avec 6 chiffres décimaux):
Latitude
Longitude
Voici un résumé qui teste les deux, rapportés ici également, pour la facilité d'accès. C'est un test Java TestNG. Vous avez besoin de Slf4j, Hamcrest et Lombok pour l'exécuter:
la source
En fait, Alix Axel, au-dessus de regex, est fausse en latitude et en longitude.
Les mesures de latitude vont de –90 ° à + 90 ° Les mesures de longitude vont de –180 ° à + 180 °
Ainsi, l'expression régulière donnée ci-dessous valide plus précisément.
De plus, selon ma pensée, personne ne devrait restreindre la virgule décimale en latitude / longitude.
OU pour l'objectif C
la source
99
pourLatitude
, tant qu'il99
est hors de portée-90, +90
et donc invalide.Répartition des expressions régulières:
-?
# accepter les valeurs négatives^
# Début de chaîne[0-9]{1,3}
# Correspond à 1-3 chiffres (c'est-à-dire de 0 à 999)(?:
# Essayez de faire correspondre ...\.
# un point décimal[0-9]{1,10}
# suivi d'un à 10 chiffres (par exemple 0-9999999999))?
# ... en option$
# Fin de chaînela source
Essaye ça:
Découvrez-le sur:
http://regexpal.com/
Collez l'expression dans la case du haut, puis mettez des choses comme ceci dans la case du bas:
Répartition des expressions régulières:
Maintenant, ce que cela ne fait PAS, c'est se limiter à cette plage:
Au lieu de cela, il se limite simplement à cette plage:
Mais il s'agit principalement de décomposer chaque morceau de l'expression.
la source
Voici une version plus stricte:
-90
-+90
-180
-+180
la source
Python:
Latitude:
result = re.match("^[+-]?((90\.?0*$)|(([0-8]?[0-9])\.?[0-9]*$))", '-90.00001')
Longitude:
result = re.match("^[+-]?((180\.?0*$)|(((1[0-7][0-9])|([0-9]{0,2}))\.?[0-9]*$))", '-0.0000')
Latitude devrait échouer dans l'exemple.
la source
@ macro-ferrari j'ai trouvé un moyen de le raccourcir, et sans regarder vers l'avenir à la lumière de toutes les discussions récentes sur les moteurs regex
la source
Je crois que vous utilisez \ w (caractère de mot) là où vous devriez utiliser \ s (espace). Les caractères du mot se composent généralement de [A-Za-z0-9_], ce qui exclut votre espace, qui ne correspond alors plus au signe moins facultatif ou à un chiffre.
la source
Cela fonctionnerait pour un format comme celui-ci: 31 ͦ 37.4 'E
la source
Rubis
Longitude -179,99999999..180
Latitude -89,99999999..90
la source
Une méthode complète et simple de l'objectif C pour vérifier la configuration correcte de la latitude et de la longitude est:
où searchString est l'entrée que l'utilisateur entrerait dans le champ de texte respectif.
la source
PHP
Voici la version de PHP (les valeurs d'entrée sont:
$latitude
et$longitude
):la source
Vous pouvez essayer ceci:
la source
Essaye ça:
la source
Essaye ça:
la source