2013-06-04 70 views
0

我想提取數字從串查詢4699183 = regionID%3D4699183 & C = 1,但它不工作:蟒蛇正則表達式來提取模式

>>> import re 
>>> string = 'query=regionID%3D4699183&c=1' 
>>> string = re.sub("^(regionID%3D\d+)", "", string) 
>>> string 
'query=regionID%3D4699183&c=1' 

我應該怎麼辦呢?

回答

1

您正在詢問一個以region開頭的匹配項,而您的輸入始於query。試試這個:

string = re.sub("^.*regionID%3D(\d+).*", r'\1', string) 

也可以做到不使用正則表達式,但如果你有其他類型的字符串來測試這種方法可能會失敗:

string = string.split('%3D')[1].split('&')[0] 

或者你可以使用re.seach的建議由Cairnarvon。

+0

謝謝。有用。 –

+1

雖然,當你真的只想匹配一個子串時使用正則表達式替換是很奇怪的。 – Cairnarvon

2

^(regionID%3D\d+)匹配regionID%3D\d+在您的字符串的開頭,而不是它在您提供的實際字符串中的位置。不過,即使它按照你的預期工作,你只是將所有東西都刪除,顯然這不是你想要的。

試試這個:

>>> import re 
>>> s = 'query=regionID%3D4699183&c=1' 
>>> m = re.search(r'regionID%3D(\d+)', s) 
>>> m.group(1) 
'4699183' 

這將使用捕獲組到您的字符串之間是否匹配regionID%3D後的一個或多個數字(貪婪)。