3

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

"N45°20'15.3"E"

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

限制是:

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

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

谢谢

4

2 回答 2

8

试试这个正则表达式:

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

它匹配任何字符串……</p>

  • ^([NS])   以N或开头S
  • ([0-5]?\d)°   后跟一个度数,可以是09( \d) 之间的单个数字,也可以是两个数字,第一个05( [0-5]) 之间,第二个09,因此在0and之间59,后跟°
  • ([0-5]?\d)'   后跟一个分钟值(同样介于0和之间59)和'
  • (?:([0-5]?\d)(?:\.\d)?")?   可选地后跟一个秒值和"符号,秒值之间059一个可选的附加小数点,和
  • ([EW])$   以Eor结尾W

如果您不想让十以下的值前面有零,请将 更改[0-5][1-5]

于 2009-05-31T20:41:01.550 回答
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()的各个部分——一个字母 N 或 S,然后是一个或多个数字的度数,等等。我想这就是你这里的意思是“解析”。thestringpat

于 2009-05-31T20:36:55.240 回答