如何在python中替换字符串中的非字母字符和数字字符

2024-06-12 08:36:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

words = re.sub("[^\w]", " ",  str).split()

但是,^\w替换了非字母数字字符。我想替换字符串中的非字母字符和数字字符,例如:

^{pr2}$

我希望有这样的结果:

 "baa baa sheep baa baa"

如果我做words = re.sub("[^\w\d]", " ", str).split(),我会得到一个带有数字字符的结果,比如'sheep23'。我想这可能是因为"^"也会影响\d,这就好像我想删除非数字字符一样。我该怎么做?在


Tags: 字符串代码re字母数字字符splitwords
3条回答

这里不需要使用regex,只需简单理解即可:

>>> import string
>>> word = "baa!!!!! baa sheep23? baa baa"
>>> "".join([l for l in word if l in string.ascii_letters+string.whitespace])
'baa baa sheep baa baa'

这个正则表达式呢?在

[^\w]|\d

编辑:

正如@Avinash所说,这并不是删除_。如果您还想删除_请使用:

^{pr2}$

如果您还想用一个单独的空间替换多个空间,请使用:

([^\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']

使用^{}

>>> from string import punctuation, digits
>>> s = "baa!!!!! baa sheep23? baa baa"
>>> s.translate(None, punctuation+digits)
'baa baa sheep baa baa'

相关问题 更多 >