据我所知,要替换字符串中的非字母数字字符,代码如下:
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'
。我想这可能是因为"^"
也会影响\d
,并且计算好像我希望删除非数字字符。我该怎么做?
答案 0 :(得分:8)
>>> from string import punctuation, digits
>>> s = "baa!!!!! baa sheep23? baa baa"
>>> s.translate(None, punctuation+digits)
'baa baa sheep baa baa'
答案 1 :(得分:3)
这里不需要正则表达式,只需简单的理解即可:
>>> 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'
答案 2 :(得分:2)
试试这个正则表达式:
[^a-zA-Z]
这匹配任何非字母的内容。
或者如果你想保留空格:
[^ A-ZA-Z \ S]
答案 3 :(得分:1)
这个正则表达式怎么样?
[^\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']
答案 4 :(得分:0)
通过re.sub
功能,
>>> s = "baa!!!!! baa sheep23? baa baa"
>>> m = re.sub(r'[^A-Za-z ]', "", s)
>>> m
'baa baa sheep baa baa'
答案 5 :(得分:0)
不是用空格替换每个非字母,而是拆分,而不是一次性完成所有操作:
>>> re.split("[^a-zA-Z]+", "baa!!!!! baa sheep23? baa baa")
['baa', 'baa', 'sheep', 'baa', 'baa']
[^\w]
相当于[^a-zA-Z0-9_]
(模数语言设置),您只需要在角色类中保留您想要的内容 - [^a-zA-Z]
显然包含空格。