0

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

4

1 回答 1

1

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

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

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

相比之下,后来您尝试re.search使用 group 方法。group 方法返回与整个正则表达式匹配的子字符串,而不是第一个组。所以它返回了所有的"2005". 试着打电话.group(1)来看看有什么不同。

于 2012-05-07T03:44:54.507 回答