Comment analyser les valeurs angulaires utilisant des expressions régulières
Question
J'ai très peu d'expérience en utilisant des expressions régulières et je dois analyser une valeur d'angle exprimé en paliers, en utilisant des expressions régulières, par exemple:
"N45 ° 20'15.3" E »
Ce qui représente: 45 degrés, 20 minutes 15,3 secondes, située au quadrant NE.
Les restrictions sont les suivantes:
- Le premier caractère peut être "N" ou "S"
- Le dernier caractère peut être "E" ou "W"
- 0 <= degrés <= 59
- 0 <= minutes <= 59
- 0 <= secondes <60, cela peut être ommited.
Python de préférence ou toute autre langue.
Merci
La solution
Essayer cette expression régulière:
^([NS])([0-5]?\d)°([0-5]?\d)'(?:([0-5]?\d)(?:\.\d)?")?([EW])$
Il correspond à toute chaîne ...
-
^([NS])
commence parN
ouS
-
([0-5]?\d)°
suivi d'une valeur de mesure, soit un chiffre unique entre0
et9
(\d
) ou deux chiffres avec le premier bewteen0
et5
([0-5]
) et le second0
et9
, donc entre0
et59
, suivi par°
-
([0-5]?\d)'
suivi d'une valeur en minutes (à nouveau entre0
et59
) et'
-
(?:([0-5]?\d)(?:\.\d)?")?
éventuellement suivie d'une seconde valeur et le signe de"
, seconde valeur comprise entre0
et59
avec un point décimal supplémentaire facultatif, et -
([EW])$
se termine par deuxE
ouW
.
Si vous ne voulez pas que les valeurs de moins de dix à avoir des zéros précédentes, changer le [0-5]
à [1-5]
.
Autres conseils
Un modèle vous pouvez utiliser:
pat = r"^([NS])(\d+)°(\d+)'([\d.]*)\"?([EW])$"
une façon de l'utiliser:
import re
r = re.compile(pat)
m = r.match(thestring)
if m is None:
print "%r does not match!" % thestring
else:
print "%r matches: %s" % (thestring, m.groups())
que vous remarquerez, sur un match, m.groups()
vous donne les différentes parties de thestring
correspondre chaque « groupe » entre parenthèses-clos dans pat
- une lettre qui est N ou S, puis un ou plusieurs chiffres pour les degrés, etc. . J'imagine que ce que vous entendez par « l'analyse syntaxique » ici.