簡體   English   中英

用Python中的另一個字符替換字符串中的多個字符

[英]Replacing multiple chars in string with another character in Python

我有一個字符串列表,我想檢查每個字符串是否包含某些字符,如果確實包含,則將其替換為另一個字符。

我有類似以下內容:

invalid_chars = [' ', ',', ';', '{', '}', '(', ')', '\\n', '\\t', '=']
word = 'Ad{min > HR'
for c in list(word):
  if c in invalid_chars:
    word = word.replace(c, '_')
print (word) 

>>> Admin_>_HR

我正在嘗試使用列表理解將其轉換為函數,但是我是個奇怪的人物...

def replace_chars(word, checklist, char_replace = '_'):
  return ''.join([word.replace(ch, char_replace) for ch in list(word) if ch in checklist])

print(replace_chars(word, invalid_chars))
>>> Ad_min > HRAd{min_>_HRAd{min_>_HR

嘗試以下一般模式:

''.join([ch if ch not in invalid_chars else '_' for ch in word])

對於完整的功能:

def replace_chars(word, checklist, char_replace = '_'):
  return ''.join([ch if ch not in checklist else char_replace for ch in word])

注意:無需將字符串word包裝在list() ,它已經可以迭代了。

這對於str.translate()可能是一個很好的用途。 您可以使用str.maketrans()invalid_chars轉換為轉換表,並在需要的地方應用它:

invalid_chars = [' ', ',', ';', '{', '}', '(', ')', '\n', '\t', '=']
invalid_table = str.maketrans({k:'_' for k in invalid_chars})

word = 'Ad{min > HR'

word.translate(invalid_table)

結果:

'Ad_min_>_HR'

如果您需要將此轉換應用到多個字符串並且效率更高,這將特別好,因為您不需要每次循環遍歷整個invalid_chars數組的每個字母,如果您if x in invalid_chars循環內的if x in invalid_chars

使用正則表達式更容易。 您可以通過一個替換調用來搜索整個字符組。 它也應該表現更好。

>>> import re
>>> re.sub(f"[{re.escape(''.join(invalid_chars))}]", "_", word)
'Ad_min_>_HR'

f字符串中的代碼構建了一個正則表達式模式,如下所示

>>> pattern = f"[{re.escape(''.join(invalid_chars))}]"
>>> print(repr(pattern))
'[\\ ,;\\{\\}\\(\\)\\\n\\\t=]'
>>> print(pattern)
[\ ,;\{\}\(\)\
\   =]

也就是說,包含每個無效字符的正則表達式字符集。 (反斜杠轉義確保無論將invalid_chars放在哪個字符中,都不會將它們解釋為正則表達式控制字符。)如果首先將它們指定為字符串,則不會將''.join()需要。

如果您需要在多個單詞上重復使用該模式,也可以編譯該模式(使用re.compile() )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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