gpt4 book ai didi

python - 为什么 re.findall() 给我的结果与 Python 中的 re.finditer() 不同?

转载 作者:太空狗 更新时间:2023-10-30 00:33:39 25 4
gpt4 key购买 nike

我写了这个正则表达式:

p = re.compile(r'''
\[\[ #the first [[
[^:]*? #no :s are allowed
.*? #a bunch of chars
(
\| #either go until a |
|\]\] #or the last ]]
)
''', re.VERBOSE)

我想使用 re.findall 获取某个字符串的所有匹配部分。我写了一些测试代码,但它给了我奇怪的结果。

这段代码

g = p.finditer('   [[Imae|Lol]]     [[sdfef]]')
print g
for elem in g:
print elem.span()
print elem.group()

给我这个输出:

(3, 10)
[[Imae|
(20, 29)
[[sdfef]]

很有道理吧?但是当我这样做时:

h = p.findall('   [[Imae|Lol]]     [[sdfef]]')
for elem in h:
print elem

输出是这样的:

|
]]

为什么 findall() 打印出的结果与 finditer 不同?

最佳答案

Findall 返回匹配组的列表。正则表达式中的括号定义了一个 findall 认为你想要的组,但你不想要组。 (?:...) 是一个非捕获括号。将您的正则表达式更改为:

'''
\[\[ #the first [[
[^:]*? #no :s are allowed
.*? #a bunch of chars
(?: #non-capturing group
\| #either go until a |
|\]\] #or the last ]]
)
'''

关于python - 为什么 re.findall() 给我的结果与 Python 中的 re.finditer() 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157671/

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