2012-05-07 69 views
0

試圖寫一個RE識別日期格式mm在Python/DD蟒正則表達式的findall,需要刪除不精確匹配

reg = "(((1[0-2])|(0?[1-9]))/((1[0-9])|(2[0-9])|(3[0-1])|(0?[0-9])))" 
match = re.findall(reg, text, re.IGNORECASE) 
print match 

對於文本= '4/13' 它給我 [('4/13', '4', '', '4', '13', '13', '', '', '')]

只需要第一個元素。我不想要不精確的匹配,我如何刪除它們。

感謝,

+1

可能重複http://stackoverflow.com/questions/10484300/python-regular-表情日期 - 甲酸) –

+0

@胡蘿蔔頂這是同一個人問後續行動;-) – snies

+0

@cheng看看你原來的問題,第二回答匹配應該是一個更好的解決方案。 – snies

回答

1

你得到所有的比賽,因爲在正則表達式各組括號產生匹配組。如果您確實不想在結果集中使用組,則可以使用非分組匹配,例如(?:...)。您也可以簡單地從列表中選取第一項並忽略其他項。

這將使你的表情是這樣的:

reg = "((?:(?:1[0-2])|(?:0?[1-9]))/(?:(?:1[0-9])|(?:2[0-9])|(?:3[0-1])|(?:0?[0-9])))" 

更多信息請參見該re文檔。

這裏有一個完整的例子:

>>> text='4/13' 
>>> reg = "((?:(?:1[0-2])|(?:0?[1-9]))/(?:(?:1[0-9])|(?:2[0-9])|(?:3[0-1])|(?:0?[0-9])))" 
>>> re.findall(reg, text, re.IGNORECASE) 
['4/13'] 
0

他們不是 「不精確匹配」。元組中的第一項對應於匹配的字符串,其他項對應於正則表達式中括號中的部分。

如果在字符串中的多個日期,你想這樣:

reg = re.compile(...) 
dates = [match[0] for match in reg.findall(text, re.IGNORE_CASE)] 
[蟒蛇正則表達式日期甲(中