如何在re中替换多个模式

alo*_*oha 0 python regex string

我有以下字符串:

a = 'P/2008 A3 (SOHO)'
Run Code Online (Sandbox Code Playgroud)

我想将其更改为:

a = 'P/2008-A3-SOHO'
Run Code Online (Sandbox Code Playgroud)

尝试解决问题:

步骤1:

b = re.sub("\s", "-", a)
print b
Run Code Online (Sandbox Code Playgroud)

输出:

P/2008-A3-(SOHO)
Run Code Online (Sandbox Code Playgroud)

第2步:

c = re.sub("[\(\)]", "", b)
print c
Run Code Online (Sandbox Code Playgroud)

输出:

P/2008-A3-SOHO
Run Code Online (Sandbox Code Playgroud)

我得到了我需要的输出,但是有更有效的方法吗?我想一步解决它.

fal*_*tru 5

re.sub不仅接受第二个参数的字符串,还接受一个函数.该函数将匹配对象作为参数获取,函数的返回值用作替换字符串:

>>> re.sub(r"[()\s]", lambda m: '-' if m.group().isspace() else '', a)
'P/2008-A3-SOHO'
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你不需要逃避(,)字符类中([...]).