我想从字符串(python)中除去连字符之外的所有非字母数字字符。 如何更改此正则表达式以匹配除连字符以外的任何非字母数字字符?
re.compile('[\W_]')
感谢。
答案 0 :(得分:25)
您可以改为使用否定的字符类:
re.compile(r"[^a-zA-Z0-9-]")
这将匹配不在字母数字范围或连字符中的任何内容。根据您当前的正则表达式,它也匹配下划线。
>>> r = re.compile(r"[^a-zA-Z0-9-]")
>>> s = "some#%te_xt&with--##%--5 hy-phens *#"
>>> r.sub("",s)
'sometextwith----5hy-phens'
请注意,这也会替换空格(当然可能是您想要的)。
编辑:SilentGhost建议使用量词处理引擎可能会更便宜,在这种情况下,您只需使用:
re.compile(r"[^a-zA-Z0-9-]+")
+
只会导致连续匹配的任何字符串同时匹配(并被替换)。
答案 1 :(得分:6)
\w
匹配字母数字,添加连字符,然后否定整个集:r"[^\w-]"