【发布时间】:2011-05-05 17:54:29
【问题描述】:
我想从字符串 (python) 中删除除连字符之外的所有非字母数字字符。 如何更改此正则表达式以匹配除连字符以外的任何非字母数字字符?
re.compile('[\W_]')
谢谢。
【问题讨论】:
我想从字符串 (python) 中删除除连字符之外的所有非字母数字字符。 如何更改此正则表达式以匹配除连字符以外的任何非字母数字字符?
re.compile('[\W_]')
谢谢。
【问题讨论】:
您可以只使用否定字符类:
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-]+")
+ 将简单地导致任何连续匹配的字符同时匹配(并被替换)。
【讨论】:
\w 匹配字母数字,添加连字符,然后否定整个集合:r"[^\w-]"
【讨论】: