我想要做的就是在一个字符串中搜索两个连续数字的实例。如果找到这样的实例,我想对它进行分组,否则为该特定组返回 none。我认为这将是微不足道的,但我不明白我要去哪里错了。在下面的示例中,删除可选 (?) 字符会得到数字,但在没有数字的字符串中,r
计算结果为 None,因此 r.groups() 会引发异常。
p = re.compile(r'(\d{2})?')
r = p.search('wqddsel78ffgr')
print r.groups()
>>>(None, ) # why not ('78', )?
# --- update/clarification --- #
感谢您的回答,但给出的解释让我一无所知。这是另一个准确指出我不明白的地方的方法。
pattern = re.compile(r'z.*(A)?')
_string = "aazaa90aabcdefA"
result = pattern.search(_string)
result.group()
>>> zaa90aabcdefA
result.groups()
>>> (None, )
我明白为什么result.group()
会产生结果,但为什么不result.groups()
产生('A', )
?我认为它是这样工作的:一旦正则表达式命中z
它,然后使用.*
. 尽管.*
匹配所有内容,正则表达式引擎知道它传递了一个可选组,并且由于?
意味着它会尝试匹配,如果可以,它应该向后工作以尝试匹配。替换?
为+
确实返回('A', )
。这表明?
如果没有必要,它不会尝试匹配,但这似乎与我读过的关于该主题的大部分内容(尤其是 J. Friedl 的优秀书籍)形成鲜明对比。