gpt4 book ai didi

python - 简单 python 正则表达式中的可选分组

转载 作者:行者123 更新时间:2023-11-28 19:25:55 24 4
gpt4 key购买 nike

我只想在字符串中搜索两个连续数字的实例。如果找到这样的实例,我想对其进行分组,否则不为该特定组返回任何值。我认为这是微不足道的,但我不明白我哪里出错了。在下面的示例中,删除可选的 (?) 字符会得到数字,但在没有数字的字符串中,r 的计算结果为 None,因此 r.groups() 会抛出异常。

p = re.compile(r'(\d{2})?')
r = p.search('wqddsel78ffgr')
print r.groups()
>>>(None, ) # why not ('78', )?

# --- 更新/澄清 --- #

感谢您的回答,但给出的解释让我一头雾水。这是另一种方法,可以准确指出我不明白的是什么。

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 的优秀书籍) .

最佳答案

这对我有用:

p = re.compile('\D*(\d{2})?')
r = p.search('wqddsel78ffgr')
print r.groups() # ('78',)

r = p.search('wqddselffgr')
print r.groups() # (None,)

关于python - 简单 python 正则表达式中的可选分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13270514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com