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

use*_*867 9 python regex alphanumeric

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

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

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

谷歌没有提供适当的答案.最接近的搜索是python正则表达式拆分任何\ W +有一些例外,但这也没有帮助我.

nu1*_*73R 10

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

re.sub(r'[^\w'+removelist+']', '',mystring)
Run Code Online (Sandbox Code Playgroud)

测试

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

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

否定的字符类意味着什么

^移动到字符类中时,它不会充当锚点,因为它会否定字符类.

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

例如[abc]将匹配a bc其中的[^abc]不匹配a bc.除了之外,还可以表达为任何其他内容a bc


vks*_*vks 6

re.sub(r'[^a-zA-Z0-9=]', '',mystring)
Run Code Online (Sandbox Code Playgroud)

您可以添加任何_想要保存的内容.


mai*_*ard 5

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

re.sub(r'[^\w=]', '',mystring)
Run Code Online (Sandbox Code Playgroud)

会删除除word-characters和=之外的所有内容