Как анализировать угловые значения с помощью регулярных выражений

StackOverflow https://stackoverflow.com/questions/932796

  •  06-09-2019
  •  | 
  •  

Вопрос

У меня очень мало опыта использования регулярных выражений, и мне нужно проанализировать значение угла, выраженное как направление, используя регулярные выражения, пример:

"N45°20'15,3"E"

Что представляет собой:45 градусов 20 минут 15,3 секунды, расположен в северо-восточном квадранте.

Ограничения:

  • Первым символом может быть «N» или «S».
  • Последний символ может быть «E» или «W».
  • 0 <= градусов <= 59
  • 0 <= минут <= 59
  • 0 <= секунда < 60, это можно опустить.

Предпочтительно Python или любой другой язык.

Спасибо

Это было полезно?

Решение

Попробуйте это регулярное выражение:

^([NS])([0-5]?\d)°([0-5]?\d)'(?:([0-5]?\d)(?:\.\d)?")?([EW])$

Он соответствует любой строке, которая…

  • ^([NS])начинается с N или S
  • ([0-5]?\d)°за которым следует значение степени, либо одна цифра между 0 и 9 (\d) или две цифры с первым между 0 и 5 ([0-5]) и второй 0 и 9, таким образом, между 0 и 59, с последующим °
  • ([0-5]?\d)'за которым следует значение минут (опять же между 0 и 59) и '
  • (?:([0-5]?\d)(?:\.\d)?")?необязательно, за которым следует значение секунд и " знак, значение секунд между 0 и 59 с необязательной дополнительной десятичной точкой и
  • ([EW])$заканчивается либо E или W.

Если вы не хотите, чтобы перед значениями меньше десяти стояли нули, измените [0-5] к [1-5].

Другие советы

Шаблон, который вы можете использовать:

pat = r"^([NS])(\d+)°(\d+)'([\d.]*)\"?([EW])$"

один из способов его использования:

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())

как вы заметите после матча, m.groups() дает вам различные части thestring соответствие каждой заключенной в круглые скобки «группе» в pat -- буква N или S, затем одна или несколько цифр для градусов и т. д.Я думаю, это то, что вы подразумеваете под «анализом».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top