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

时间:2009-05-31 20:33:02

标签: python regex angle

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

“N45°20'15.3”E“

代表: 45度,20分钟,15.3秒,位于NE象限。

限制是:

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

Python优选或任何其他语言。

由于

2 个答案:

答案 0 :(得分:8)

试试这个正则表达式:

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

它匹配任何......

的字符串
  • ^([NS]) NS
  • 开头
  • ([0-5]?\d)° 后跟一个学位值,可以是09之间的单个数字(\d),也可以是第一个bewteen 05[0-5])以及第二个09,因此在059之间,然后是°
  • ([0-5]?\d)' 后跟分钟值(再次在059之间)和'
  • (?:([0-5]?\d)(?:\.\d)?")? 可选后跟一个秒值和"符号,059之间的秒值,并带有可选的附加小数点,和
  • ([EW])$ EW结尾。

如果您不希望允许十位以下的值位于零之前,请将[0-5]更改为[1-5]

答案 1 :(得分: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()会为您提供thestring的各个部分,以匹配pat中每个括号内的“组” - 一个字母为N或S,然后是学位的一个或多个数字等等。我想这就是你在这里“解析”的意思。