如何使用正则表达式解析Angular值

3
我很少使用正则表达式,但我需要使用正则表达式解析表示方位角的角度值。例如:

"N45°20'15.3"E"

它代表: 45度,20分,15.3秒,位于东北象限。

限制条件如下:

  • 第一个字符可以是“N”或“S”
  • 最后一个字符可以是“E”或“W”
  • 0 <= 度数 <= 59
  • 0 <= 分钟 <= 59
  • 0 <= 秒数 < 60,可以省略。

最好使用Python或任何其他语言。

谢谢

2个回答

8

尝试使用这个正则表达式:

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

它匹配任何以特定形式开头和结尾的字符串:

  • ^([NS]) 以 NS 开始
  • ([0-5]?\d)° 紧随其后的是度数值,可以是单个数字 0 到 9 (\d) 或第一个数字为 0 到 5 之间,第二个数字为 0 到 9 之间(即 0 到 59 之间)的两位数,接着是 °
  • ([0-5]?\d)' 紧随其后的是分钟数值(同样介于 0 和 59 之间),接着是 '
  • (?:([0-5]?\d)(?:\.\d)?")? 可选地跟着秒数值和 " 符号,秒数值介于 0 到 59 之间,还可以有一个可选的小数点,例如 1.5,整体被括在非捕获组中,最终跟着一个 " 符号
  • ([EW])$ 以 EW 结尾

如果您不想允许值小于十的数字有前导零,请将 [0-5] 改为 [1-5]


不错 - 比我更严格,因为它还检查数字的范围! - Alex Martelli
好的回答,为了“百科全书式”的完整性,可能值得进一步扩展一下关于每个东西是什么的内容。 - Slartibartfast

4
您可以使用的模式是:
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()会给出与pat中每个括号内的“组”相匹配的thestring的各个部分——一个字母N或S,然后是一个或多个数字表示度数等。我想这就是您在此处所说的“解析”的意思。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接