尝试使用负向前替换所有与模式不匹配的字符串:

regexPattern = '((?!*' + 'word1|word2|word3' + ').)*$'
mytext= 'jsdjsqd word1dsqsqsword2fjsdjswrod3sqdq'
return re.sub(regexPattern, "P", mytext)

#Expected Correct Output:  'PPPPPPword1PPPPPPword2PPPPPword3PPP'

#BAD Output:  'jsdjsqd word1dsqsqsword2fjsdjswrod3sqdq'

我试试这个,但它不起作用(字符串保持不变)。
如何修改? (认为​​这是非常困难的正则表达式)

最佳答案

您可以使用

import re
regex = re.compile(r'(word1|word2|word3)|.', re.S)
mytext = 'jsdjsqd word1dsqsqsword2fjsdjsword3sqdq'
print(regex.sub(lambda m: m.group(1) if m.group(1) else "P", mytext))
// => PPPPPPPPword1PPPPPPword2PPPPPPword3PPPP

查看 IDEONE demo

正则表达式是 (word1|word2|word3)|. :
  • (word1|word2|word3) - word1word2word3 字符序列
  • | - 或...
  • . - 任何字符(包括换行符,因为 re.S DOTALL 模式开启)

  • 查看 regex demo

    关于python - Python中的负模式匹配正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36309290/

    10-12 22:03