代码:
re.findall('(/\d\d\d\d)?','/2000')
结果:
['/ 2000','']
代码:
re.findall('/\d\d\d\d?','/2000')
结果:
[ '/ 2000']
为什么第一个例子中会返回额外的''? 我正在使用django url配置的第一个例子,有没有办法可以阻止''的匹配?
答案 0 :(得分:3)
因为使用括号定义了一个组,然后使用?
,您要求重复0到1组。因此空字符串和/2000
都匹配。
答案 1 :(得分:1)
运算符?
将匹配前面表达式的0或1次重复,在第一种情况下前面的表达式是(/\d\d\d\d)
,而在第二种情况下是最后一个\d
。
因此第一种情况是空字符串""
将匹配,因为它包含表达式(/\d\d\d\d)
答案 2 :(得分:0)
以下是正在发生的事情:正则表达式引擎以其指针在目标字符串中的第一个字符之前开始。它贪婪地使用整个字符串并将匹配结果放在第一个列表元素中。这使内部指针位于字符串的末尾。但由于正则表达式模式可以匹配虚无,它也成功匹配字符串末尾的位置,因此,列表中有两个元素。