替换字符串中的多个字符

chi*_*tra 3 python regex string

python中是否有一种简单的方法可以用另一个替换倍数字符?

例如,我想更改:

name1_22:3-3(+):Pos_bos 
Run Code Online (Sandbox Code Playgroud)

至

name1_22_3-3_+__Pos_bos
Run Code Online (Sandbox Code Playgroud)

因此,基本上全部替换"(",")",":"为"_"。

我只知道这样做:

str.replace(":","_")
str.replace(")","_")
str.replace("(","_")
Run Code Online (Sandbox Code Playgroud)

yat*_*atu 9

您可以使用re.sub一种模式替换多个字符:

import re
s = 'name1_22:3-3(+):Pos_bos '
re.sub(r'[():]', '_', s)
Run Code Online (Sandbox Code Playgroud)

输出量

'name1_22_3-3_+__Pos_bos '
Run Code Online (Sandbox Code Playgroud)


che*_*ner 5

使用翻译表。在Python 2中,maketrans在string模块中定义。

>>> import string
>>> table = string.maketrans("():", "___")
Run Code Online (Sandbox Code Playgroud)

在Python 3中,它是一个str类方法。

>>> table = str.maketrans("():", "___")
Run Code Online (Sandbox Code Playgroud)

在这两种方法中,表均作为参数传递给str.translate。

>>> 'name1_22:3-3(+):Pos_bos'.translate(table)
'name1_22_3-3_+__Pos_bos'
Run Code Online (Sandbox Code Playgroud)

在Python 3中,您还可以将单个dict映射输入字符传递给输出字符maketrans:

table = str.maketrans({"(": "_", ")": "_", ":": "_"})
Run Code Online (Sandbox Code Playgroud)