我有一个使用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()
答案 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'}