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

时间:2014-12-21 10:27:52

标签: python regex string

我想要将除\W划线以外的所有-字母替换为空格,即:

  1. black-white会提供black-white
  2. black#white会提供black white
  3. 我非常了解正则表达式,但我不知道如何处理它。

    考虑我想使用Unicode,因此[a-zA-Z]不是\w,只有英文版。 考虑到我更喜欢Python语法,但可以阅读其他建议。

2 个答案:

答案 0 :(得分:11)

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

>>> re.sub(r'[^-\w]', ' ', 'black-white')
'black-white'
>>> re.sub(r'[^-\w]', ' ', 'black#white')
'black white'

如果您使用regex包,则可以使用nested sets, set operations

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

答案 1 :(得分:1)

我会使用下面的negative lookahead

>>> re.sub(r'(?!-)\W', r' ', 'black-white')
'black-white'
>>> re.sub(r'(?!-)\W', r' ', 'black#white')
'black white'

(?!-)\W开头的负面预测断言我们要匹配的字符是\W(非单词字符列表)中的任何字符,而不是连字符-。这就像是一种减法,即\W - character present inside the negative lookahead(即连字符)。

DEMO