我使用正则表达式的经验很少,我需要使用正则表达式解析表示为方位角的角度值,例如:
"N45°20'15.3"E"
代表:45度,20分15.3秒,位于NE象限。
限制是:
- 第一个字符可以是“N”或“S”
- 最后一个字符可以是“E”或“W”
- 0 <= 度 <= 59
- 0 <= 分钟 <= 59
- 0 <= second < 60,可以省略。
最好使用 Python 或任何其他语言。
谢谢
试试这个正则表达式:
^([NS])([0-5]?\d)°([0-5]?\d)'(?:([0-5]?\d)(?:\.\d)?")?([EW])$
它匹配任何字符串……</p>
^([NS])
以N
或开头S
([0-5]?\d)°
后跟一个度数,可以是0
和9
( \d
) 之间的单个数字,也可以是两个数字,第一个0
和5
( [0-5]
) 之间,第二个0
和9
,因此在0
and之间59
,后跟°
([0-5]?\d)'
后跟一个分钟值(同样介于0
和之间59
)和'
(?:([0-5]?\d)(?:\.\d)?")?
可选地后跟一个秒值和"
符号,秒值之间0
和59
一个可选的附加小数点,和([EW])$
以E
or结尾W
。如果您不想让十以下的值前面有零,请将 更改[0-5]
为[1-5]
。
您可以使用的模式:
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,然后是一个或多个数字的度数,等等。我想这就是你这里的意思是“解析”。thestring
pat