2014-04-11 35 views
0

我必須使用正則表達式與Python一個簡單的問題...正則表達式不匹配它應該

我試圖抓住GPS座標指出,將被格式化爲這樣一行:

-73209460,44477974 

有時它會有領先的' - ',有時候會不會。因此,我的正則表達式如下:

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

這裏的怪異的一部分:

我已經測試此查詢上單獨的GPS座標串(上)和它工作得很好,與它匹配,並如預期的行爲。然而,當我設法得到它相匹配的GPS COORDS當出現「噪音」圍繞它,它不抓住它......這是一條線,在GPS COORDS是:

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() 
+3

你可能會尋找類似:'/ ^( - \ d {8}?),( - \ d {8}?)$ /' – Rohit

+0

您是否嘗試過在測試程序測試您的正則表達式像KODOS? 另外,我會仔細看看python的正則表達式文檔頁面,它看起來像很多您的更改可以像羅希特說的那樣捲起來。 –

+1

你使用re.match()還是re.search()?你能用一個可行的例子發佈你的代碼,一個不起作用嗎? –

回答

0
從事實的正則表達式看起來有點脆弱

除此之外,這很可能是由於使用re.match而不是re.search

re.match嘗試匹配正則表達式的開始你的字符串的,那裏的re.search試圖找到一個匹配在字符串中的任何地方https://docs.python.org/3/library/re.html#search-vs-match

+0

那就是它了,謝謝!是的正則表達式看起來很討厭:P –

0

正如SpoonMeiser說,你應該使用re.search()

的差異是Python的文檔在這裏解釋。這裏有一個更復雜的正則表達式,可以在命名組中捕獲緯度和經度。假設最後的值是經度值。這可能會中斷,但這是一個不錯的主意。

>>> 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'}