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