2014-10-17 200 views
0

有誰知道爲什麼這個正則表達式不返回任何匹配?Python的正則表達式不匹配

local = u'Rua Engenheira Enedina Alves Marqu\xeas, 126 - Cajuru, Cajuru, Curitiba - PR' 
p = re.compile(ur'\d[ ]+?-(.*?)(?:,|-)') 
matches = re.match(p,local) 

Link to test

當我嘗試這個表達式中任何正則表達式測試工具,它返回我想要什麼,我這個情況下,我想捕捉字

卡茹魯

+0

你好,請thoose這兩個網站(pythex)看看[https://pythex.org/]和(pyregex)[HTTP:// WWW .pyregex.com /]。他們對你真的很有幫助! – VivienG 2014-10-17 14:25:14

回答

3

您正在使用re.match(),而不是re.search()re.match()錨點開始

使用re.search()正常工作:

>>> local = u'Rua Engenheira Enedina Alves Marqu\xeas, 126 - Cajuru, Cajuru, Curitiba - PR' 
>>> p = re.compile(ur'\d[ ]+?-(.*?)(?:,|-)') 
>>> re.search(p, local) 
<_sre.SRE_Match object at 0x104dde288> 
>>> re.search(p, local).group() 
u'6 - Cajuru,' 

見Python的正則表達式HOWTO的match() vs. search() section

match()功能如果RE在字符串開始處匹配,而search()只掃描檢查通過字符串進行比賽。記住這個區別很重要。請記住,match()只會報告將從0開始的成功匹配;如果比賽不會從零開始,match()將不會報告。

請注意,您不必在此處調用模塊級別re.search();在p編譯表達式有search()方法太:

>>> p.search(local).group() 
u'6 - Cajuru,' 
+0

謝謝,我已閱讀鏈接,並獲得了不同。現在我的代碼正在工作。 =) – 2014-10-17 14:12:46