假设我有一个字符串' 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")