正则表达式与它应该匹配的不匹配

时间:2014-04-11 22:34:20

标签: python regex

我有一个使用Regex和python的简单问题......

我正试图抓住一条格式化的GPS坐标:

-73209460,44477974

有时它会有领先的' - ',有时它不会。因此,我的正则表达式如下:

'-?\d\d\d\d\d\d\d\d,\d\d\d\d\d\d\d\d'

这是奇怪的部分:

我已经仅在GPS坐标字符串(上图)上测试了此查询,它可以正常工作,匹配它,并按预期运行。然而,当我试图让它与周围有“噪音”的GPS坐标相匹配时,它没有捕捉到它......这是GPS坐标所在的一条线:

RoutingRequest,1391101299,3,-10,1,-1,1000,-73209460,44477974,-1,56862713,56862712,

知道它为什么不能抓住这个?与逗号有关系吗?

谢谢你们。

编辑:

感谢所有回复......这是我正在使用的快速测试脚本:

import re

def doesntWork():
    gpsCoords = r'-?\d\d\d\d\d\d\d\d,\d\d\d\d\d\d\d\d'
    gps = re.compile(gpsCoords)

    match = gps.match("1000,-73209460,44477974,-1,56862")

    if match:
        return True
    else:
        return False

def works():
    gpsCoords = r'-?\d\d\d\d\d\d\d\d,\d\d\d\d\d\d\d\d'
    gps = re.compile(gpsCoords)

    match = gps.match("-73209460,44477974")
    if match:
        return True
    else:
        return False

def main():
    print doesntWork()
    print works()

main()

2 个答案:

答案 0 :(得分:0)

除了您的正则表达式看起来有点脆弱之外,这可能是由于使用re.match而不是re.search

re.match尝试将正则表达式与字符串的开头进行匹配,其中re.search尝试在字符串中找到匹配的匹配项

差异在这里的python文档中解释:https://docs.python.org/3/library/re.html#search-vs-match

答案 1 :(得分:0)

正如SpoonMeiser所说,你应该使用re.search()。这是一个更复杂的正则表达式,它捕获命名组中的lat和lon。假设最后一个值是经度值..这可能会破坏,但这是一个不错的主意。

>>> r = "RoutingRequest,1391101299,3,-10,1,-1,1000,-73209460,44477974,-1,56862713,56862712"
>>> re.search(r"(?P<lat>-?\d{8},\d{8}).*(?P<lon>\d{8},\d{8})", r).groupdict()
{'lat': '-73209460,44477974', 'lon': '56862713,56862712'}