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

标签 python regex

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

>>> 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/

相关文章:

python - 如何在此 matplotlib 图中使用颜色图?

python - Django:如何在 settings.py 中退出

php - 用于验证和清理 PHP 中所有英语和非英语 unicode 字母字符的正则表达式

python - 如何对凹面多边形进行三角剖分?

python - 如何从多个 Python dict 条目中动态提取数据

regex - 使用正则表达式验证数学表达式吗?

regex - 等波浪符运算符在 bash 4 中不起作用

javascript - 对于正则表达式之间只有空格的单词,用逗号替换空格

python - 使用 try- except-finally 和上下文管理器增加覆盖范围

python - 从 Python3.3 中的字符串中删除除字母和空格之外的所有内容