尝试使用负向前替换所有与模式不匹配的字符串:
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)
- word1
或 word2
或 word3
字符序列 |
- 或... .
- 任何字符(包括换行符,因为 re.S
DOTALL 模式开启) 查看 regex demo
关于python - Python中的负模式匹配正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36309290/