Как анализировать угловые значения с помощью регулярных выражений
Вопрос
У меня очень мало опыта использования регулярных выражений, и мне нужно проанализировать значение угла, выраженное как направление, используя регулярные выражения, пример:
"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, затем одна или несколько цифр для градусов и т. д.Я думаю, это то, что вы подразумеваете под «анализом».