如何用正则表达式替换所有\ W(无字母)除了' - '(破折号)?

Cha*_*eon 8 python regex string

我想要将\W除了-破折号之外的所有字母替换为空格,即:

  1. black-white 会给 black-white
  2. black#white 会给 black white

我非常了解正则表达式,但我不知道如何处理它.

想想看,我想使用Unicode所以[a-zA-Z]不会\w仅英文喜欢.考虑到我更喜欢Python语法,但可以阅读其他建议.

fal*_*tru 11

使用否定字符类:( \W相当于[^\w]; [^-\w]=> \W除外-)

>>> re.sub(r'[^-\w]', ' ', 'black-white')
'black-white'
>>> re.sub(r'[^-\w]', ' ', 'black#white')
'black white'
Run Code Online (Sandbox Code Playgroud)

如果使用regex包,则可以使用嵌套集,设置操作:

>>> import regex
>>> print regex.sub(r'(?V1)[\W--[-]]', ' ', 'black-white')
black-white
>>> print regex.sub(r'(?V1)[\W--[-]]', ' ', 'black#white')
black white
Run Code Online (Sandbox Code Playgroud)