我有一串模式 {{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。为什么这两种方法的输出之间存在差异。什么时候应该是我当前日期模式的正则表达式?
问问题
122 次
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 回答