我发现的大多数问题都偏向于这样一个事实,即他们在数字中寻找字母,而我在我想要的无数字符串中寻找数字。 我需要输入一个字符串并检查它是否包含任何数字,以及它是否拒绝它。

函数isdigit()仅当所有字符都是数字时才返回True。我只是想看看用户是否输入了一个数字,比如“我有一只狗”之类的句子。

什么好主意吗?


当前回答

迭代器方法。它消耗所有字符,除非满足一个数字。next的第二个参数修复当迭代器为“空”时返回的默认值。在这种情况下,它被设置为False,但也“工作,因为它被强制转换为if中的布尔值。

def has_digit(string):
    str_iter = iter(string)
    while True:
        char = next(str_iter, False)
        # check if iterator is empty
        if char:
            if char.isdigit():
                return True
        else:
            return False

或者只看生成器理解的第一项

def has_digit(string):
    return next((True for char in string if char.isdigit()), False)

其他回答

您可以像这样使用str.isdigit函数使用任何函数

def has_numbers(inputString):
    return any(char.isdigit() for char in inputString)

has_numbers("I own 1 dog")
# True
has_numbers("I own no dog")
# False

或者你也可以使用正则表达式,就像这样

import re
def has_numbers(inputString):
    return bool(re.search(r'\d', inputString))

has_numbers("I own 1 dog")
# True
has_numbers("I own no dog")
# False

你可以使用any和str.isdigit的组合:

def num_there(s):
    return any(i.isdigit() for i in s)

如果字符串中有数字,函数将返回True,否则返回False。

演示:

>>> king = 'I shall have 3 cakes'
>>> num_there(king)
True
>>> servant = 'I do not have any cakes'
>>> num_there(servant)
False

可以对String中的每个字符应用isdigit()函数。或者你可以使用正则表达式。

我还发现我如何在Python中找到一个字符串中的数字?用非常合适的方式返回数字。下面的答案来自于那个问题的答案。

number = re.search(r'\d+', yourString).group()

另外:

number = filter(str.isdigit, yourString)

有关更多信息,请查看regex文档:http://docs.python.org/2/library/re.html

编辑:这返回实际的数字,而不是布尔值,所以上面的答案更适合你的情况

第一个方法将返回第一个数字和随后的连续数字。因此,1.56将返回为1。10,000将返回为10。0207-100-1000将作为0207返回。

第二种方法行不通。

要提取所有数字,点和逗号,并且不丢失非连续的数字,使用:

re.sub('[^\d.,]' , '', yourString)

这个怎么样?

import string

def containsNumber(line):
    res = False
    try:
        for val in line.split():
            if (float(val.strip(string.punctuation))):
                res = True
                break
    except ValueError:
        pass
    return res

containsNumber('234.12 a22') # returns True
containsNumber('234.12L a22') # returns False
containsNumber('234.12, a22') # returns True

这也会起作用。

if any(i.isdigit() for i in s):
    print("True")