我想要将除\W
划线以外的所有-
字母替换为空格,即:
black-white
会提供black-white
black#white
会提供black white
我非常了解正则表达式,但我不知道如何处理它。
考虑我想使用Unicode,因此[a-zA-Z]
不是\w
,只有英文版。
考虑到我更喜欢Python语法,但可以阅读其他建议。
答案 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
(即连字符)。