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

3 投票
2 回答
1100 浏览
提问于 2025-04-15 11:57

我对正则表达式的使用经验很少,现在需要用正则表达式来解析一个表示方位角的值,举个例子:

"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])   字符串开头必须是 NS
  • ([0-5]?\d)°   接下来是一个度数值,可以是一个数字(0到9之间),或者是两个数字,第一个数字在0到5之间,第二个数字在0到9之间,这样总共的范围是0到59,最后要有一个 ° 符号
  • ([0-5]?\d)'   然后是分钟值(同样在0到59之间),后面要有一个 ' 符号
  • (?:([0-5]?\d)(?:\.\d)?")?   可选地后面可以跟一个秒数值和 " 符号,秒数值在0到59之间,可以有一个可选的小数点
  • ([EW])$   字符串结尾必须是 EW

如果你不想让小于十的数字前面有零,可以把 [0-5] 改成 [1-5]

撰写回答