如何使用正则表达式删除所有符号,但用' - '替换空白

时间:2015-04-23 01:49:31

标签: python regex symbols

我知道使用正则表达式,例如

re.sub(r'[^\w]', '', string)

我可以从字符串中删除符号。但我现在想要的是删除所有其他符号,但用' - '替换空白。有没有办法做到这一点?

例如,

string = "Felix's 3D's"
# I want it as "Felixs-3D"

谢谢!

2 个答案:

答案 0 :(得分:1)

如果要用-替换空格,请忽略和str.replace:

print(re.sub(r'[^\w\s]', '',string).replace(" ","-"))
Felixs-3Ds

答案 1 :(得分:0)

您可以指定执行替换的功能:

def replace(match):
    return '-' if match.group().isspace() else ''

re.sub(r'[^\w]', replace, string)

演示:

>>> import re
>>> def replace(match):
...     return '-' if match.group().isspace() else ''
... 
>>> string = "Felix's 3D's"
>>> re.sub(r'[^\w]', replace, string)
'Felixs-3Ds'

来自docs

  

re.sub(pattern, repl, string, count=0, flags=0)

     

...

     

如果repl是一个函数,则每次非重叠都会调用它   发生模式。该函数采用单个匹配对象   参数,并返回替换字符串。

因此,replace将收到每个匹配,如果是空格则返回'-',否则返回''