替换字符串中的多个字符

时间:2019-03-21 12:36:56

标签: python regex string

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 替换为"(",")",":"

我只知道这样做:

"_"

4 个答案:

答案 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中,maketransstring模块中定义。

>>> 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,所以我使用''.joinlist个字符(长度为str的字符)更改为str