【问题标题】:How to strip string of all integers and spaces如何去除所有整数和空格的字符串
【发布时间】:2016-05-04 11:30:05
【问题描述】:

我想知道如何去除所有整数和空格的输入。我知道 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'。

【问题讨论】:

    标签: python python-3.x python-3.4 python-3.3


    【解决方案1】:

    您可以使用isdigit() 字符串方法进行如下操作:

    battery = ''.join(c for c in battery if not c.isdigit() and not c.isspace())
    

    【讨论】:

    • 谢谢,这正是我所需要的 :))
    • @mvelay 你忘了删除空格。
    • c.isdigit() 可能匹配太多(它可能允许int() 不接受的东西)。请改用c.isdecimal()
    【解决方案2】:

    您也可以使用regular expressions 来完成这项工作,注意\d 表示任何数字\s 表示任何空格:

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

    【讨论】:

      【解决方案3】:

      您可以使用translatestr.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 应该使用相反的策略(尽管这将是一个不同的问题):使用白名单而不是黑名单。
      • @J.F.Sebastian 使用 Python 的 87 个字符长笑话。
      • 你明白有非ascii数字吗?
      • @J.F.Sebastian 现在我明白了。实际上还有 450 个其他字符是我没有删除的数字。谢谢你的课。
      【解决方案4】:

      所有好的答案,无论您选择哪种方法都没有错。 我的答案是使用.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。

      【讨论】:

        猜你喜欢
        • 2017-09-20
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 2017-12-28
        • 2011-08-24
        • 2023-04-08
        相关资源
        最近更新 更多