如何从正则表达式组中排除一个字符?

时间:2010-11-05 17:45:58

标签: python regex

我想从字符串(python)中除去连字符之外的所有非字母数字字符。 如何更改此正则表达式以匹配除连字符以外的任何非字母数字字符?

re.compile('[\W_]')

感谢。

2 个答案:

答案 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-]"