代码之家  ›  专栏  ›  技术社区  ›  Eric Acevedo

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

  •  3
  • Eric Acevedo  · 技术社区  · 17 年前

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

    “N45°20'15.3”E“

    代表: 45度,20分钟15.3秒,位于东北象限。

    限制条件如下:

    • 第一个字符可以是“n”或“s”
    • 最后一个字符可以是“e”或“w”
    • 0<=度<=59
    • 0<=分钟<=59
    • 0<=second<60,可以忽略。

    最好是python或任何其他语言。

    谢谢

    2 回复  |  直到 17 年前
        1
  •  8
  •   Gumbo    17 年前

    尝试此正则表达式:

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

    它匹配任何一根弦

    • ^([NS]) ___ N 或 S
    • ([0-5]?\d)° ___,后跟一个度值,或者是介于 0 和 9 ( \d )或两位数的第一个数字 零 和 5 ( [0-5] )第二个 零 和 九 因此 零 和 59 紧随其后 °
    • ([0-5]?\d)' ___,后跟分钟值(再次介于 零 和 五十九 ) '
    • (?:([0-5]?\d)(?:\.\d)?")? ___(可选)后跟秒值和 " 符号,秒值介于 零 和 五十九 带有可选的附加小数点,以及
    • ([EW])$ ___ E 或 W .

    如果您不想让小于10的值有前导零,请更改 [0-5] 到 [1-5] .

        2
  •  4
  •   Alex Martelli    17 年前

    您可以使用的模式:

    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 匹配中带括号的“group” pat --一个字母,N或S,然后一个或多个数字表示度数,等等。我想这就是你在这里所说的“解析”的意思。

    推荐文章