【问题标题】:Check if one character in string is numeric or is a letter [Python] [closed]检查字符串中的一个字符是数字还是字母[Python] [关闭]
【发布时间】:2015-02-26 14:51:54
【问题描述】:

我想检查字符串,看看字符串中是否至少有一个字符是字母或数字。我该怎么做?

【问题讨论】:

    标签: python string isnumeric


    【解决方案1】:

    你可以使用re.search

    if re.search(r'[a-zA-Z\d]', string):
    

    如果字符串至少包含一个字母或数字,它将返回一个匹配对象。

    示例:

    >>> s = "foo0?"
    >>> re.search(r'[a-zA-Z\d]', s)
    <_sre.SRE_Match object; span=(0, 1), match='f'>
    >>> s = "???"
    >>> re.search(r'[a-zA-Z\d]', s)
    >>> s = "???0"
    >>> re.search(r'[a-zA-Z\d]', s)
    <_sre.SRE_Match object; span=(3, 4), match='0'>
    >>> 
    

    【讨论】:

    • 从来没有注意到python 3改变了匹配对象的repr,这很好。
    • 那么“foo0”会返回为真吗?
    【解决方案2】:

    str.isalnum:

    In [16]: s = "foo"    
    In [17]: s.isalnum()
    Out[17]: True
    In [20]: s = "123"
    In [21]: s.isalnum()
    Out[21]: True
    In [22]: s = "foo123"
    In [23]: s.isalnum()
    Out[23]: True
    

    然后使用任何:

    any(x.isalnum() for x in  s)
    
    In [24]: s = "!@1"   
    In [25]: any(x.isalnum() for x in  s)
    Out[25]: True
    In [27]: s = "!@()"
    In [28]: any(x.isalnum() for x in  s)
    Out[28]: False
    

    如果我们找到任何字母或数字字符,它将短路,如果字符串不包含任何字符,则返回 False。

    【讨论】:

    • 我猜 op 期望 "%*&^%A" 也返回 True,因为“至少一个字符”是一个字母。
    【解决方案3】:

    另一种解决方案可能是(不要忘记import string):

    any(c in s for c in string.letters + string.digits)
    

    (与正则表达式解决方案相比,这是依赖于语言环境的,例如包括德语变音符号等)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-16
      • 2017-02-27
      • 2012-12-27
      • 2011-09-01
      • 2012-12-23
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多