gpt4 book ai didi

python - python 正则表达式中断言背后的积极查找问题

转载 作者:行者123 更新时间:2023-12-01 00:00:31 24 4
gpt4 key购买 nike

尝试使用相当长的正则表达式,但它归结为这一小部分与我的预期不符。

>>> re.search(r'(foo)((?<==)bar)?', 'foo').groups()
('foo', None)

>>> re.search(r'(foo)((?<==)bar)?', 'foo=bar').groups()
('foo', None)

第一个是我想要的,第二个应该返回 ('foo', 'bar')

我怀疑我只是误解了lookbehinds是如何工作的,一些解释会很好。

最佳答案

目标后面的查找永远不会包含在匹配中 - 它应该充当 anchor ,但实际上不会被正则表达式消耗。

仅当当前位置位于目标之前时,后视模式才应该匹配。在您的情况下,匹配字符串中的“foo”后,当前位置位于“=”,前面没有“=” - 它前面有“o”。

了解这一点的另一种方法是查看 re documentation和阅读

Note that patterns which start with positive lookbehind assertions will never match at the beginning of the string being searched;

在匹配 foo 后,您的后面将尝试匹配字符串(其余部分)的开头 - 这永远不会起作用。

其他人建议的正则表达式可能会更好地为您服务,但我认为您可能正在寻找

>>> re.search('(foo)(=(bar))?', 'foo=bar').groups()
('foo', '=bar', 'bar')

如果您发现额外的组有点烦人,您可以省略内部的“()”并直接从匹配组中删除第一个字符...

关于python - python 正则表达式中断言背后的积极查找问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1465246/

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