Rom*_*man 6 python regex python-3.x
我无法弄清楚反向否定查找。假设我有一个文本
qwe abc
qwe abc
abc
Run Code Online (Sandbox Code Playgroud)
我想找到所有abc
没有在后面的qwe
,后面可能有任意数量的空格。
(?<!qwe)\s*?(abc)
Run Code Online (Sandbox Code Playgroud)
匹配一切。我认为它类似于“匹配任意数量的空格,abc
如果qwe
前面没有空格”
我也试过
qwe|(abs)
Run Code Online (Sandbox Code Playgroud)
方法,但它对我不起作用。尽管对于我不希望 match 起作用的情况,组是空的,但我真的不知道如何将它与re.sub
函数(需要)一起使用。即使组为空,也会re.sub
替换字符串。
环境:python 3
您不需要在这里使用lookbehind。只需坚持允许动态长度断言的负前瞻:
^(?!.*qwe\s+abc).*abc
Run Code Online (Sandbox Code Playgroud)
或者用单词边界来确保qwe
和abc
是完整的单词。
^(?!.*qwe\s+abc).*abc
Run Code Online (Sandbox Code Playgroud)
正则表达式解释:
^
: 开始(?!.*qwe\s+abc)
qwe
:如果我们后面跟着 1 个以上的空格,则负向预测会使匹配失败abc
:如果我们在行中的任何位置都发现.*
:匹配0个或多个任意字符abc
: 匹配abc