负前瞻后跟空格

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

anu*_*ava 2

您不需要在这里使用lookbehind。只需坚持允许动态长度断言的负前瞻:

^(?!.*qwe\s+abc).*abc
Run Code Online (Sandbox Code Playgroud)

或者用单词边界来确保qweabc是完整的单词。

^(?!.*qwe\s+abc).*abc
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

正则表达式解释:

  • ^: 开始
  • (?!.*qwe\s+abc)qwe:如果我们后面跟着 1 个以上的空格,则负向预测会使匹配失败abc:如果我们在行中的任何位置都发现
  • .*:匹配0个或多个任意字符
  • abc: 匹配abc