检查一个string是否包含一个数字

我发现的大多数问题都偏向于他们正在寻找字母的事实,而我正在寻找数字,我想成为一个无数的string。 我需要input一个string,并检查它是否包含任何数字,如果它拒绝它。

函数isdigit()只在所有字符都是数字时才返回true。 我只是想看看用户是否input了一个数字,所以像“我拥有一只狗”之类的句子。

有任何想法吗?

你可以使用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 

或者,您可以使用正则expression式,就像这样

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

你可以使用anystr.isdigit的组合:

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

如果string中存在数字,则函数将返回True ,否则返回False

演示:

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

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

你最好使用正则expression式。 它快得多。

 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 

您可以在String中的每个字符上应用函数isdigit()。 或者你可以使用正则expression式。

另外我发现如何在Python中的string中find一个数字? 用非常合适的方式返回数字。 下面的解决scheme来自于这个问题的答案。

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

或者:

 number = filter(str.isdigit, yourString) 

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

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

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

第二种方法不起作用。

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

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

使用

  str.isalpha() 

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

如果string中的所有字符都是字母,并且至less有一个字符,则返回true,否则返回false。

这个如何?

 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 
 '''You can use range with count to check how many time a number appears in the string by checking it against the range''' 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 

你可以使用NLTK方法。 它会在文本中find“1”和“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.')