我使用正则表达式的经验很少,我需要使用正则表达式解析表示为方位的角度值,例如:
“N45°20'15.3”E“
代表: 45度,20分钟,15.3秒,位于NE象限。
限制是:
Python优选或任何其他语言。
由于
答案 0 :(得分:8)
试试这个正则表达式:
^([NS])([0-5]?\d)°([0-5]?\d)'(?:([0-5]?\d)(?:\.\d)?")?([EW])$
它匹配任何......
的字符串^([NS])
以N
或S
([0-5]?\d)°
后跟一个学位值,可以是0
和9
之间的单个数字(\d
),也可以是第一个bewteen 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]
。
答案 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,然后是学位的一个或多个数字等等。我想这就是你在这里“解析”的意思。