替换非字母数字字符,除了一些例外python

时间:2015-01-14 08:41:22

标签: python regex alphanumeric

在perl s/[^\w:]//g中会替换所有非字母数字字符 EXCEPT:

在python中我使用re.sub(r'\W+', '',mystring) 除了_下划线之外,它会删除所有非字母数字。 有没有办法放异常,我希望不要替换像=和。

这样的符号

之前我正在应用其他方法,即使用re.sub('[!@#\'\" $()]','''',mystring`)替换所有不需要的字符 但是,我无法预测mystring中所有字符的内容,因此我希望删除除少数字符之外的所有非字母数字字符。

谷歌没有提供合适的答案。最近的搜索是python regex split any \W+ with some exceptions,但这对我也没有帮助。

3 个答案:

答案 0 :(得分:10)

您可以在否定的字符组中指定您不需要删除的所有内容。

re.sub(r'[^\w'+removelist+']', '',mystring)

<强>测试

>>> import re
>>> removelist = "=."
>>> mystring = "asdf1234=.!@#$"
>>> re.sub(r'[^\w'+removelist+']', '',mystring)
'asdf1234=.'

此处removelist变量是一个字符串,其中包含您需要从删除中排除的所有字符的列表。

否定字符类意味着什么

^移入角色类时,它不会充当锚点,因为它会否定角色类。

这就是^在一个角色类里面说像[^abc]它否定了角色类的含义。

例如,[abc]将匹配a bc[^abc]a b或{c不匹配{1}}。除了a bc

之外,其他任何内容都可以表示为

答案 1 :(得分:6)

re.sub(r'[^a-zA-Z0-9=]', '',mystring)

您可以添加任意内容,例如_,无论您想要保存哪个。

答案 2 :(得分:5)

我相信你在perl中描述的方法也可以在python中使用,例如:

re.sub(r'[^\w=]', '',mystring)

会删除除word-characters和=

之外的所有内容