2012-05-07 21 views
0

我有一个模式字符串{{开始日期| 2005 | 8 | 29}} 现在我想提取2005,8,29作为三个单独的元素。 因此,我使用的正则表达式:re.findall('([0-9])+',str) 这给我5,8和9而不是2005,8,29 当我尝试搜索方法时使用相同的模式re.search('([0-9])+',str).group() 然后我得到第一个元素作为2005. 为什么这两个方法的输出有区别。什么时候应该是我当前日期模式的正则表达式?正则表达式findall和搜索给出不同的原因,尽管有相同的模式

回答

1

长话短说:你的意思是'([0-9]+)',而不是'([0-9])+'

详细信息:每对parens确定一个组。如果在一次尝试匹配时,该组被捕获多次,则仅报告最后的捕获。

特别是,当你叫这个重新对字符串,它匹配所有的"2005"在第一次就圆,因为([0-9])部分匹配'2',然后'0',然后'0',然后'5'之前,它不能匹配任何更多。所以它匹配所有"2005",但是该组本身只报告了该子表达的最后一个匹配:'5'

相比之下,后来您尝试使用组方法re.search。该组方法返回整个正则表达式,not the first group匹配的子字符串。所以它返回了所有的"2005"。请尝试拨打.group(1)来改变区别。

相关问题