正则表达式模式findall和搜索给出不同的原因,尽管相同的模式

时间:2012-05-07 03:40:04

标签: regex python-2.7

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

1 个答案:

答案 0 :(得分:1)

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

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

特别是,当你针对字符串调用它时,它会在第一轮匹配所有"2005",因为([0-9])部分匹配'2',然后是'0' ,然后'0',然后是'5',之后再也无法匹配。因此,它匹配了"2005"的所有内容,但该组本身仅报告了该子表达式的最后一个匹配项:'5'

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