[英]How to replace multiple words in a string through Python in a case insensitive way?
例如,讓我說一下字符串:
s = 'Back in BLACK, I hit the sAck, I've been too LOng I'm glad to be back.'
在上面的字符串中,我想用不區分大小寫的方式用以下單詞搜索和替換某些單詞
黑色:b ***
麻袋:s ***
長:l ***
很高興:g ***
我希望得到的字符串
s = 'Back in B****, I hit the s***, I've been too L*** I'm glad to be back.'
基本上,以上字符串保持了我要替換的單詞的第一個字母的大小寫。 單詞后面的字母將以' * '結尾
我假設我需要列出一些替換清單。 在Django中,我目前正在使用replace_all()函數,但它區分大小寫。 因此,對於像BLACK和sAck這樣的單詞,由於有許多組合,這將成為一項艱巨的任務!
我該怎么做呢?
使用re模塊 ,這是“ black”的簡要示例:
>>> 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."
要保留第一個字母的大小寫,請將其捕獲並在替換中使用后向引用:
>>> 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."
要在一次通過中完成所有替換:
>>> 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."
這有點密集,但是有效:
>>> re.sub(
r"(?i)\b(black|sack|long|glad)\b",
lambda m: m.group()[0] + "*"*(len(m.group())-1),
s
)
"Back in B****, I hit the s***, I've been too L*** I'm g*** to be back."
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.