我知道要替换字符串中的非字母数字字符,代码如下:

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']

10-06 02:08