我知道有很多正则表达式和负向回顾问题,但我有一个找不到答案。我想查找 water 的实例,但如果它前面有 never 且两者之间的字符数量可变,则不会。这两个单词之间有无限多个可变字符,并且lookbehind 不允许可变字符。我的代码永远不会找到,但它会在脚本的一开始就找不到。 有没有办法将向后查找限制为 20 或 30 个字符?我拥有的:
(?i)^(?=.*?(?:water))(?:(?!never).)*$
只是我正在使用的一些示例:
water (match)
I have water (match)
I never have water
Where is the water. (match)
I never have food or water
I never have food but I always have water (match)
I never have food or chips. I like to walk. I have water (match)
同样,问题是我可以有一个 10 句话长的段落,如果其中有从不任何地方,它就不会找到水并且回望并且lookahead不接受可变字符。感谢您提供的任何帮助。
最佳答案
您可以在 Python 的内置 re
模块中使用此正则表达式:
(?i)^(?!.*\bnever\b.{,20}\bwater\b).*\bwater\b
正则表达式详细信息:
(?i)
:启用忽略大小写模式^
:开始(?!.*\bnever\b.{,20}\bwater\b)
:负先行条件。如果单词never
出现在单词water
之前的 20 个字符内,则匹配失败。.*\bwater\b
:在行中任意位置查找单词water
关于具有可变字符数的 Python 负向后查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69453358/