如何去除字符串中的所有整数和空格

3

我想知道如何去掉输入中的所有整数和空格。我知道Python中的.strip()函数可以做到这一点,但它只适用于字符串开头/结尾的字符。

下面是我的代码:

    battery = input("Is the phone charger turned on at the plug?").lower()
        if battery == "y" or battery == "yes":
            print("Replace the phone's battery or contact the phone's manufacturer.")
            break

如果用户输入“ye2s”,程序将去掉“2”并将其视为“yes”。

4个回答

4
您可以使用 isdigit() 字符串方法来实现以下操作:
battery = ''.join(c for c in battery if not c.isdigit() and not c.isspace())

谢谢,这正是我所需要的:)) - adam
@mvelay 你忘记去掉空格了。 - Jan Vlcinsky
c.isdigit() 可能匹配过多(它可能允许 int() 不接受的内容)。请改用 c.isdecimal() - jfs

3

您可以使用translate函数。str.maketrans的最后一个参数是要删除的字符:

>>> table = str.maketrans("", "", "0123456789 ")
>>> "ye2s with spac3es".translate(table)
'yeswithspaces'

使用列表操作可能比字符串操作更快。

处理所有Unicode十进制字符

正如J.F.Sebastian所指出的,Unicode提供了许多被认为是十进制数字的字符。

所有数字:

>>> len("".join(c for c in map(chr, range(sys.maxunicode + 1)) if c.isdecimal()))
460

为了删除所有可能的小数点(和空格)字符:

>>> delchars = "".join(c for c in map(chr, range(sys.maxunicode + 1)) if c.isdecimal() or c.isspace())
>>> table = str.maketrans("", "", delchars)
>>> "ye2s with spac3es".translate(table)
'yeswithspaces'

您可以使用 "".join(c for c in map(chr, range(sys.maxunicode + 1)) if c.isdecimal() or c.isspace()) 替代 "0123456789 "。但是 OP 应该使用相反的策略(尽管这将是一个不同的问题):使用白名单而不是黑名单。 - jfs
@J.F.Sebastian 使用 Python 写了一个 87 个字符长的笑话。 - Jan Vlcinsky
你明白存在非ASCII数字吗? - jfs
@J.F.Sebastian 现在我明白了。实际上还有450个数字字符没有被删除。感谢您的教训。 - Jan Vlcinsky

2

您可以使用正则表达式来完成这项工作,注意\d表示任何数字,\s表示任何空格:

>>> import re
>>> input = 'ye255 s'
>>> re.sub('[\d\s]+', '', 'ye255 s')
'yes'

0

所有的答案都很好,无论你选择哪种方法都没有问题。 我的建议是使用.lower(),这样你的程序将能够识别"Y""Yes""YEs""YES"

修改这一行:

if battery == "y" or battery == "yes":

到这一行:

if battery.lower() == "y" or battery.lower() == "yes":

或者,如果您只想使用.lower()一次,可以这样做

if battery.lower() in ["y", "yes"]:

HTH.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接