【发布时间】:2021-10-30 05:19:56
【问题描述】:
我正在尝试创建一个匹配单词 bar 的正则表达式,除非后面有单词 foo。
我发现负向lookbehind 可以处理这个问题,但问题是在foo 和bar 之间有任意数量的字符属于表达式[\s\-/]。
不幸的是,负后视不支持任意长度。
所以(?<!foo[\s\-/]*)bar 模式无效。
你知道可以克服这个问题的正则表达式技术吗?
【问题讨论】:
-
只是要指出:不支持任意前瞻/后视长度通常不是正则表达式限制,而是某些正则表达式实现的限制。例如this 适用于 JavaScript,但基本上没有其他正则表达式实现选择,因此标记您正在使用的正则表达式的特定风格可能会有所帮助
-
@apokryfos 我在 python3 中使用
re,它不支持它(显然)。而且我不能真正改变我使用的包,因为这意味着我的代码会发生很多变化...... -
如果您安装 PyPi 正则表达式模块 (
pip install regex) 然后使用import regex as re,我认为不需要更改任何内容。然后,re.findall(r'(?<!\bfoo\b.*?)\bbar\b', text)将起作用。