如何通过Python以不区分大小写的方式替换字符串中的多个单词?

noa*_*ale 2 python regex string django replace

让我们说,例如,我有字符串:

s = 'Back in BLACK, I hit the sAck, I've been too LOng I'm glad to be back.'
Run Code Online (Sandbox Code Playgroud)

在上面的字符串中,我想用不区分大小写的方式用以下单词搜索和替换某些单词

黑色:b***

麻袋:s***

长:l***

很高兴:g***

我希望得到的字符串

s = 'Back in B****, I hit the s***, I've been too L*** I'm glad to be back.'
Run Code Online (Sandbox Code Playgroud)

基本上上面的字符串保留了我要替换的单词的第一个字母的情况.单词后面的字母将以' * '表示

我假设我需要列出一些替换列表.在Django中,我目前正在使用replace_all()函数,但它区分大小写.因此,对于像BLACK和sAck这样的单词,由于有许多组合,这将成为一项艰巨的任务!

我该怎么做呢?

And*_*ark 5

使用re模块,这里是"黑色"的简短示例:

>>> import re
>>> s = "Back in BLACK, I hit the sAck, I've been too LOng I'm glad to be back."
>>> regex = re.compile(r'black', flags=re.IGNORECASE)
>>> regex.sub('b***', s)
"Back in b***, I hit the sAck, I've been too LOng I'm glad to be back."
Run Code Online (Sandbox Code Playgroud)

要保留第一个字母的大小写,请将其捕获并在替换中使用后向引用:

>>> regex = re.compile(r'(b)lack', flags=re.IGNORECASE)
>>> regex.sub(r'\1***', s)
"Back in B***, I hit the sAck, I've been too LOng I'm glad to be back."
Run Code Online (Sandbox Code Playgroud)

要在一次通过中完成所有替换:

>>> regex = re.compile(r'(?=(.))(?:black|sack|long|glad)', flags=re.IGNORECASE)
>>> regex.sub(r'\1***', s)
"Back in B***, I hit the s***, I've been too L*** I'm g*** to be back."
Run Code Online (Sandbox Code Playgroud)

  • 请参阅我最近的编辑,它将进行多次替换. (2认同)