gpt4 book ai didi

python - 带括号的正则表达式前瞻

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:48 26 4
gpt4 key购买 nike

re.findall('(?=(b))','bbbb') 到底在做什么?它返回 ['b', 'b', 'b', 'b'],但我期望 ['b', 'b', 'b'] ,因为如果它看到前面有另一个“b”,它应该只返回一个“b”?

谢谢!

编辑:似乎 re.findall('b(?=(b))','bbbb') 返回 ['b', 'b', 'b' ] 正如我所料,但我仍然对 re.findall('(?=(b))','bbbb') 的作用感到困惑。

编辑 2:知道了!感谢您的回复。

最佳答案

那里有一个零长度匹配并且您有一个捕获组。当 re.findall 的正则表达式有一个捕获组时,结果列表将是在那些捕获组中捕获的内容(如果有的话)。

正则表达式匹配四个位置:字符串的开头、第一个 b 之前、第二个 b 之前和第三个 b。这是一个图表,其中 | 代表匹配的位置(为说明添加的空格):

 b b b b
| captures the next b, passes

b b b b
| captures the next b, passes

b b b b
| captures the next b, passes

b b b b
| captures the next b, passes

b b b b
| lookahead fails, match fails

如果您不想要捕获组而只想匹配零长度位置,请使用 (?: 而不是 ( 对于非捕获群组:

(?=(?:b))

(尽管生成的列表将由空字符串组成并且不会很有用)

关于python - 带括号的正则表达式前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52576338/

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