gpt4 book ai didi

python - 为什么 re.findall 匹配了字符串,却没有正确返回结果?

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:10 27 4
gpt4 key购买 nike

我想在另一个字符串中找到模式 ([A-Z][0-9]+)+ 的子字符串。

一种方法是:

import re
re.findall("([A-Z][0-9]+)+", "asdf A0B52X4 asdf")[0]

奇怪的是,这会产生 'X4',而不是 'A0B52X4',这是我预期的结果。

深入研究一下,我还尝试只匹配字符串组成的简单组:

re.findall("[A-Z][0-9]+", "asdf A0B52X4 asdf")

产生预期结果:['A0', 'B52', 'X4']

更有趣的是:

re.findall("([A-Z][0-9]+){3,}", "asdf A0B52X4 asdf")

这会产生 ['X4'],但似乎仍然匹配我感兴趣的整个字符串,这通过尝试 re.search 并使用手动获取子串的结果:

m = re.search("([A-Z][0-9]+)+", "asdf A0B52X4 asdf")
m.string[m.start():m.end()]

这会产生 'A0B52X4'

现在,根据我对 python 中正则表达式的了解,括号不仅匹配其中的正则表达式,而且还声明一个“组”,让您可以用它做各种事情。我的理论是,出于某种原因,re.findall 仅将组的最后一个匹配项而不是完整匹配项放入结果字符串中。

为什么 re.findall 会这样?

最佳答案

这是因为您的匹配组一次只匹配模式的一个实例。 + 只是意味着匹配所有在一行中出现的。它仍然一次只捕获比赛的第一部分。

将正则表达式包裹在一个外部组中,如下所示:

((?:[A-Z][0-9]+)+)

Demo

关于python - 为什么 re.findall 匹配了字符串,却没有正确返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878151/

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