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

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

什么好主意吗?


当前回答

我让@zyxue的回答更明确一点:

RE_D = re.compile('\d')

def has_digits(string):
    res = RE_D.search(string)
    return res is not None

has_digits('asdf1')
Out: True

has_digits('asdf')
Out: False

@zyxue在答案上提出的方案中,哪个是基准测试最快的方案?

其他回答

此外,您可以使用regex findall。这是一个更通用的解决方案,因为它增加了对数字长度的更多控制。在需要最小长度的数字的情况下,这可能会很有帮助。

s = '67389kjsdk' 
contains_digit = len(re.findall('\d+', s)) > 0

https://docs.python.org/2/library/re.html

你最好使用正则表达式。它要快得多。

import re

def f1(string):
    return any(i.isdigit() for i in string)


def f2(string):
    return re.search('\d', string)


# if you compile the regex string first, it's even faster
RE_D = re.compile('\d')
def f3(string):
    return RE_D.search(string)

# Output from iPython
# In [18]: %timeit  f1('assdfgag123')
# 1000000 loops, best of 3: 1.18 µs per loop

# In [19]: %timeit  f2('assdfgag123')
# 1000000 loops, best of 3: 923 ns per loop

# In [20]: %timeit  f3('assdfgag123')
# 1000000 loops, best of 3: 384 ns per loop

您可以使用NLTK方法。

这将在文本中找到'1'和'One':

import nltk 

def existence_of_numeric_data(text):
    text=nltk.word_tokenize(text)
    pos = nltk.pos_tag(text)
    count = 0
    for i in range(len(pos)):
        word , pos_tag = pos[i]
        if pos_tag == 'CD':
            return True
    return False

existence_of_numeric_data('We are going out. Just five you and me.')

任何和单词都可以组合起来达到如下所示的目的。

>>> def hasDigits(s):
...     return any( 48 <= ord(char) <= 57 for char in s)
...
>>> hasDigits('as1')
True
>>> hasDigits('as')
False
>>> hasDigits('as9')
True
>>> hasDigits('as_')
False
>>> hasDigits('1as')
True
>>>

关于这个实现有几点。

any更好,因为它像C语言中的短路表达式一样工作,并且会在确定后立即返回结果,即在字符串'a1bbbbbbc'的情况下,'b'和' C '甚至不会进行比较。 Ord更好,因为它提供了更大的灵活性,比如只在“0”和“5”之间或任何其他范围内检查数字。例如,如果你要为数字的十六进制表示写一个验证器,你会希望字符串的字母只在' a '到'F'的范围内。

alp_num = [x for x in string.split() if x.isalnum() and re.search(r'\d',x) and 
re.search(r'[a-z]',x)]

print(alp_num)

这将返回所有包含字母和数字的字符串。Isalpha()返回全数字或全字符的字符串。