我发现的大多数问题都偏向于这样一个事实,即他们在数字中寻找字母,而我在我想要的无数字符串中寻找数字。 我需要输入一个字符串并检查它是否包含任何数字,以及它是否拒绝它。
函数isdigit()仅当所有字符都是数字时才返回True。我只是想看看用户是否输入了一个数字,比如“我有一只狗”之类的句子。
什么好主意吗?
我发现的大多数问题都偏向于这样一个事实,即他们在数字中寻找字母,而我在我想要的无数字符串中寻找数字。 我需要输入一个字符串并检查它是否包含任何数字,以及它是否拒绝它。
函数isdigit()仅当所有字符都是数字时才返回True。我只是想看看用户是否输入了一个数字,比如“我有一只狗”之类的句子。
什么好主意吗?
当前回答
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()返回全数字或全字符的字符串。
其他回答
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
可以对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)
更简单的解决方法是
s = '1dfss3sw235fsf7s'
count = 0
temp = list(s)
for item in temp:
if(item.isdigit()):
count = count + 1
else:
pass
print count
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循环,我们保证了这个事件。
我让@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在答案上提出的方案中,哪个是基准测试最快的方案?