我知道要替换字符串中的非字母数字字符,代码如下:
words = re.sub("[^\w]", " ", str).split()
但是,
^\w
替换非字母数字字符。我想替换字符串中的非字母字符和数字字符,如:"baa!!!!! baa sheep23? baa baa"
我希望结果是这样的:
"baa baa sheep baa baa"
如果我这样做,我会得到一个带有数字字符的结果,比如
words = re.sub("[^\w\d]", " ", str).split()
。我想这可能是因为'sheep23'
也会影响"^"
,而且它的作用就像我希望删除非数字字符一样。我该怎么做才对? 最佳答案
这个正则表达式怎么样?
[^\w]|\d
编辑:
正如@Avinash所说,这不会删除
_
。如果要同时删除_
,请使用:[^\w]|[\d_]
如果还想用一次使用替换多个空格:
([^\w]|[\d_])+
下面是添加下划线的示例:
In [1]: import re
In [2]: s = "baa!!!!! baa sheep23? baa baa___"
In [3]: re.sub("([^\w]|[\d_])+", " ", s)
Out[3]: 'baa baa sheep baa baa '
In [4]: re.sub("([^\w]|[\d_])+", " ", s).split()
Out[4]: ['baa', 'baa', 'sheep', 'baa', 'baa']