python中是否有一种简单的方法可以用另一个替换倍数字符?
例如,我想更改:
data = { 'Jeremy':73284, 'Hansel':8784.3, 'Uee':9480938.2, 'Seolhyun':984958.3, 'Ketsuno Ana':24131, 'Trump':45789 }
maximum = 'Jeremy'
for key in data.keys():
if data[key] > data[maximum]:
maximum = key
print('Maximum:'+maximum+", the value is:"+str(data[maximum]))
到
name1_22:3-3(+):Pos_bos
因此,基本上将所有name1_22_3-3_+__Pos_bos
替换为"(",")",":"
。
我只知道这样做:
"_"
答案 0 :(得分:7)
您可以使用re.sub
用一个模式替换多个字符:
import re
s = 'name1_22:3-3(+):Pos_bos '
re.sub(r'[():]', '_', s)
输出
'name1_22_3-3_+__Pos_bos '
答案 1 :(得分:5)
使用翻译表。在Python 2中,maketrans
在string
模块中定义。
>>> import string
>>> table = string.maketrans("():", "___")
在Python 3中,它是str
类方法。
>>> table = str.maketrans("():", "___")
在这两种方法中,表均作为参数传递给str.translate
。
>>> 'name1_22:3-3(+):Pos_bos'.translate(table)
'name1_22_3-3_+__Pos_bos'
在Python 3中,您还可以传递一个dict
映射输入字符以将输出字符映射到maketrans
:
table = str.maketrans({"(": "_", ")": "_", ":": "_"})
答案 2 :(得分:2)
继续使用您当前使用replace()
的方法:
s = "name1_22:3-3(+):Pos_bos"
for e in ((":", "_"), ("(", "_"), (")", "__")):
s = s.replace(*e)
print(s)
输出:
name1_22_3-3_+___Pos_bos
编辑 :(出于可读性考虑)
s = "name1_22:3-3(+):Pos_bos"
replaceList = [(":", "_"), ("(", "_"), (")", "__")]
for elem in replaceList:
print(*elem) # : _, ( _, ) __ (for each iteration)
s = s.replace(*elem)
print(s)
OR
repList = [':','(',')'] # list of all the chars to replace
rChar = '_' # the char to replace with
for elem in repList:
s = s.replace(elem, rChar)
print(s)
答案 3 :(得分:1)
另一种可能性是通过以下方式结合使用所谓的 list理解和所谓的三元条件运算符:
text = 'name1_22:3-3(+):Pos_bos '
out = ''.join(['_' if i in ':)(' else i for i in text])
print(out) #name1_22_3-3_+__Pos_bos
因为它给出了list
,所以我使用''.join
将list
个字符(长度为str
的字符)更改为str
。