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

Était-ce utile?

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 par N ou S
  • ([0-5]?\d)° suivi d'une valeur de mesure, soit un chiffre unique entre 0 et 9 (\d) ou deux chiffres avec le premier bewteen 0 et 5 ([0-5]) et le second 0 et 9, donc entre 0 et 59, suivi par °
  • ([0-5]?\d)' suivi d'une valeur en minutes (à nouveau entre 0 et 59) et '
  • (?:([0-5]?\d)(?:\.\d)?")? éventuellement suivie d'une seconde valeur et le signe de ", seconde valeur comprise entre 0 et 59 avec un point décimal supplémentaire facultatif, et
  • ([EW])$ se termine par deux E ou W.

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top