在Python中删除数字(正则表达式)
我想从一个字符串中删除所有的数字。不过,下面这段代码也把任何单词里的数字给删掉了,显然我不想这样。我试了很多正则表达式,但都没有成功。
谢谢!
s = "This must not b3 delet3d, but the number at the end yes 134411"
s = re.sub("\d+", "", s)
print s
结果:
这个部分不能被删除,但最后的数字可以
11 个回答
7
使用 \s
这个方法不是很好,因为它处理不了制表符等其他空白字符。我们可以先试试一个更好的解决方案:
re.sub(r"\b\d+\b", "", s)
注意,这里的模式是一个原始字符串,因为 \b
通常在字符串中表示退格符,而我们想要的是特殊的单词边界正则表达式转义。还有一个稍微复杂一点的版本:
re.sub(r"$\d+\W+|\b\d+\b|\W+\d+$", "", s)
这个版本试图在字符串的开头和结尾去掉空白字符,特别是当字符串的开始或结束有数字时。我说“试图”是因为如果字符串末尾有多个数字,那么你还是会看到一些空格。
21
试试这个:
"\b\d+\b"
这样做只会匹配那些不属于其他单词的数字。
55
在 \d+ 前面加一个空格。
>>> s = "This must not b3 delet3d, but the number at the end yes 134411"
>>> s = re.sub(" \d+", " ", s)
>>> s
'This must not b3 delet3d, but the number at the end yes '
补充说明:看了大家的评论后,我决定给出一个更完整的答案。我认为这样可以涵盖所有情况。
s = re.sub("^\d+\s|\s\d+\s|\s\d+$", " ", s)