[英]Custom table for str.translate in Python 3
如果我運行此代碼:
s.translate(str.maketrans({'as': 'dfg', '1234': 'qw'}))
我會得到:
ValueError: string keys in translate table must be of length 1
有沒有辦法使用str.translate
一次替換多個字符? Docs說我可以使用codecs
來實現靈活的方法,但是我不知道怎么做。
如果沒有,那該怎么辦呢?
不行 str.translate
可以單獨使用,以取代單獨的字符。 替換字符串可以是任何長度,但是鍵必須是單個字符。
當他們的文檔中提到codecs
他們是說您可以實現自定義編碼,進行注冊,然后使用該文件打開文件...調用諸如codecs.maketrans
之類的東西並不是一件codecs.maketrans
,這是很多工作。 我個人將re.sub
與功能替換一起使用:
replacements = {'as': 'dfg', '1234': 'qw'}
re.sub('({})'.format('|'.join(map(re.escape, replacements.keys()))), lambda m: replacements[m.group()], text)
哪個似乎可以滿足您的要求:
>>> re.sub('({})'.format('|'.join(map(re.escape, replacements.keys()))), lambda m: replacements[m.group()], "test as other test1234")
'test dfg other testqw'
字符串的translate
方法根據您提供的翻譯用字符串替換一個字符。
以下是幾種情況:
Original string: as 1234
Error in [s.translate(str.maketrans({'as': 'dfg', '1234': 'qw'}))]
Error in [s = s.translate(str.maketrans({'a': 'd', '12': 'q'}))]
s.translate(str.maketrans({'a': 'd', '1': 'q'})): ds q234
解決方案以獲得結果
編輯問題之后,以下是獲得所需替換的解決方案:
按鍵拆分,然后按翻譯詞典中的值加入。
Replaced all subsrings: dfg qw
編碼:
s = 'as 1234'
print('Original string:',s)
try:
w = s.translate(str.maketrans({'as': 'dfg', '1234': 'qw'}))
print("s.translate(str.maketrans({'as': 'dfg', '1234': 'qw'}):", w)
except:
print("Error in [s.translate(str.maketrans({'as': 'dfg', '1234': 'qw'}))]")
try:
w = s.translate(str.maketrans({'a': 'd', '12': 'q'}))
print("s.translate(str.maketrans({'a': 'd', '12': 'q'})):", w)
except:
print("Error in [s = s.translate(str.maketrans({'a': 'd', '12': 'q'}))]")
try:
w = s.translate(str.maketrans({'a': 'd', '1': 'q'}))
print("s.translate(str.maketrans({'a': 'd', '1': 'q'})):", w)
except:
print("Error in [s = s.translate(str.maketrans({'a': 'd', '1': 'q'}))]")
trans_dict = {'as': 'dfg', '1234': 'qw'}
for k,v in trans_dict.items():
y = s.split(k)
s = v.join(y)
print('Replaced all subsrings:',s)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.