簡體   English   中英

如何通過不區分大小寫的方式通過Python替換字符串中的多個單詞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM