我有一个模式为{{Start date|2005|8| 29 }}的字符串,现在我想提取2005,8,29作为三个独立的元素。因此我使用正则表达式: re.findall('(0-9)+',str)当我尝试搜索方法re.search('(0-9)+',str).group()时,我得到的是5,8和9,而不是2005,8,29,然后我得到了2005年的第一个元素。为什么这两种方法的输出会有差异。什么时候应该是我当前日期模式的正则表达式?
发布于 2012-05-07 11:44:55
长话短说:你指的是'([0-9]+)'
,而不是'([0-9])+'
。
详细信息:每对双亲确定一个组。如果在一次匹配尝试中多次捕获该组,则仅报告最后一次捕获。
特别是,当您对字符串调用这个re时,它在第一轮中匹配所有的"2005"
,因为([0-9])
部分匹配'2'
,然后是'0'
,然后是'0'
,然后是'5'
,直到它不能再匹配。所以它匹配所有的"2005"
,但是组本身只报告了该子表达式的最后一个匹配:'5'
。
相比之下,后来您尝试了使用group方法的re.search
。group方法返回与整个正则表达式not the first group匹配的子字符串。所以它返回了所有的"2005"
。请尝试调用.group(1)
来查看其中的差异。
https://stackoverflow.com/questions/10476387
复制相似问题