如何使用正则表达式解析Angular值
我对正则表达式的使用经验很少,现在需要用正则表达式来解析一个表示方位角的值,举个例子:
"N45°20'15.3"E"
这个表示的是:45度,20分钟,15.3秒,位于东北象限。
这里有一些限制条件:
- 第一个字符可以是"N"(北)或"S"(南)
- 最后一个字符可以是"E"(东)或"W"(西)
- 度数范围是0到59
- 分钟范围是0到59
- 秒数范围是0到59,可以省略
最好使用Python,或者其他任何语言。
谢谢
2 个回答
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,然后是一个或多个数字表示度数,等等。我想这就是你所说的“解析”的意思。
8
试试这个正则表达式:
^([NS])([0-5]?\d)°([0-5]?\d)'(?:([0-5]?\d)(?:\.\d)?")?([EW])$
它可以匹配任何字符串,具体要求如下:
^([NS])
字符串开头必须是N
或S
([0-5]?\d)°
接下来是一个度数值,可以是一个数字(0到9之间),或者是两个数字,第一个数字在0到5之间,第二个数字在0到9之间,这样总共的范围是0到59,最后要有一个°
符号([0-5]?\d)'
然后是分钟值(同样在0到59之间),后面要有一个'
符号(?:([0-5]?\d)(?:\.\d)?")?
可选地后面可以跟一个秒数值和"
符号,秒数值在0到59之间,可以有一个可选的小数点([EW])$
字符串结尾必须是E
或W
。
如果你不想让小于十的数字前面有零,可以把 [0-5]
改成 [1-5]
。