检查一个字符串包含了一些

问题描述 投票:143回答:12

大部分时间我已经找到了问题是他们正在寻找他们的数字字母的事实偏见,而我正在寻找在想什么,我是一个无数串号。我需要输入一个字符串,并检查它是否包含任何数字,如果它拒绝它。

该功能仅isdigit()返回True如果所有的字符是数字。我只是想看看,如果用户输入一个号码,这样类似的句子:“我自己的一只狗”什么的。

有任何想法吗?

python string
12个回答
231
投票

您可以使用any功能,与str.isdigit功能,这样

>>> def hasNumbers(inputString):
...     return any(char.isdigit() for char in inputString)
... 
>>> hasNumbers("I own 1 dog")
True
>>> hasNumbers("I own no dog")
False

另外,您可以使用正则表达式,像这样

>>> import re
>>> def hasNumbers(inputString):
...     return bool(re.search(r'\d', inputString))
... 
>>> hasNumbers("I own 1 dog")
True
>>> hasNumbers("I own no dog")
False

0
投票

更简单的解决方法是,

s = '1dfss3sw235fsf7s'
count = 0
temp = list(s)
for item in temp:
    if(item.isdigit()):
        count = count + 1
    else:
        pass
print count

0
投票

我很惊讶,没有人mentionned anymap的这种组合:

def contains_digit(s):
    isdigit = str.isdigit
    return any(map(isdigit,s))

在Python 3这可能是最快的有(可能除了正则表达式),是因为它不含有任何环(和走样功能避免了寻找它在str)。

作为map返回list,打破any短路不要使用在Python 2


0
投票
import string
import random
n = 10

p = ''

while (string.ascii_uppercase not in p) and (string.ascii_lowercase not in p) and (string.digits not in p):
    for _ in range(n):
        state = random.randint(0, 2)
        if state == 0:
            p = p + chr(random.randint(97, 122))
        elif state == 1:
            p = p + chr(random.randint(65, 90))
        else:
            p = p + str(random.randint(0, 9))
    break
print(p)

此代码生成与大小为n,其中至少包含一个大写,小写和一个数字的序列。通过使用while循环,我们保证了本次活动。


0
投票

anyord可以被组合以达到目的,如下所示。

>>> 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
>>>

一对夫妇的这个实施点。

  1. any更好,因为它的工作原理类似于C语言短路表达和将尽快它可以在字符串的情况下,“a1bbbbbbc”“B”和'C'S甚至不会被比较来确定,即返回结果。
  2. ord更好,因为它仅提供“0”和“5”或任何其它范围之间像支票号码更多的灵活性。例如,如果你写一个验证器对数字的十六进制表示你想字符串具有范围“A”只“F”字母。

37
投票

您可以使用anystr.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

23
投票

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

20
投票

采用

str.isalpha() 

参考:https://docs.python.org/2/library/stdtypes.html#str.isalpha

如果字符串中的所有字符是字母,并至少有一个字符,否则为false返回true。


6
投票

你可以在字符串中的每个字符应用功能ISDIGIT()。或者你可以使用正则表达式。

此外,我发现How do I find one number in a string in Python?非常合适的方式返回数字。下面的解决方案是从这个问题的答案。

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

或者:

number = filter(str.isdigit, yourString)

如需进一步信息看看正则表达式实况:http://docs.python.org/2/library/re.html

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

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

第二种方法是行不通的。

为了提取所有的数字,点和逗号,而不是失去了非连续的数字,使用:

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

2
投票

您可以使用它的方法NLTK。

这将在文中找到这两个“1”和“一”:

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.')

1
投票

这个如何?

import string

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

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

1
投票

你可以做到这一点,如下所示:

if a_string.isdigit(): do_this() else: do_that()

https://docs.python.org/2/library/stdtypes.html#str.isdigit

使用.isdigit()也意味着不必诉诸情况下,异常处理(尝试/除外),您需要使用列表理解(尝试/除了是不可能在列表解析里)。


1
投票

您可以使用范围与数量通过检查其针对的范围内,以检查多少多少次出现在字符串中:

def count_digit(a):
    sum = 0
    for i in range(10):
        sum += a.count(str(i))
    return sum

ans = count_digit("apple3rh5")
print(ans)

#This print 2
© www.soinside.com 2019 - 2024. All rights reserved.