在字符串上使用.translate()来剥离数字[Python 3]



假设我有一个字符串' okjser823ab'。我如何使用。translate()从字符串中删除所有数字?

我在Python 2中看到。你可以做一些类似于。translate(None, '0123456789')的事情,但是如果我在Python 3中尝试这个,它告诉我该方法只接受一个参数。

在Python 3中看起来有点难;不知道为什么。

你可以这样做:

>>> import string
>>> translation = str.maketrans(string.ascii_letters, string.ascii_letters, string.digits)
>>> "2okjser823ab".translate(translation)
'okjserab'

您可能需要将string.ascii_letters扩展为您期望的任何其他输入(例如string.ascii_letters + string.punctuation + string.whitespace)。

编辑:我无法在str.maketrans的文档中清楚地找到它,但如果您使用前两个参数的空字符串,则所有内容将被映射为1到1,但删除部分(第三个参数)仍然发生:

>>> translation = str.maketrans("", "", string.digits)
>>> "2eeŷýéeokjser823 ab.;t".translate(translation)
'eeŷýéeokjser ab.;t'

以下是Python 3中maketrans和字符串函数的文档。

maketrans(x, y, z)中,x中的每个字符映射到y中相同位置的字符-建立x替换y。z中的字符映射到None。因此,它们将被删除。

添加到user707650的答案,这里是一个更紧凑的实现,我们传递空字符串''作为前两个参数。传递string.digits作为第三个参数,去掉0-9的数字。

import string
line = '@ qu1ck br0wn f0x jump3 0ver the l@zy d0g'
line = line.translate(line.maketrans('', '', string.digits))
print(line)
# Result: @ quck brwn fx jump ver the l@zy dg

如果您还想删除标点符号,那么您可以添加

line = line.translate(line.maketrans('', '', string.punctuation))
# Result:  quck brwn fx jump ver the lzy dg

您可以使用strip函数:

strings="tycoon0123456789999"
strings.strip("0123456789")

最新更新