当前位置: 首页 > 面试题库 >

有没有更好的方法来查找字符串是否包含数字?

薛文斌
2023-03-14
问题内容

我正在使用既包含数字又包含字母数字或仅包含数字但不仅仅包含字母的字符串。为了测试错误匹配,我需要检查字符串是否至少包含一位数字,如果没有,则输出错误消息。我一直在使用以下代码:

s = '0798237 sh 523-123-asdjlh'

def contains_digits(s):
    for char in list(s):
        if char.isdigit():
            return True
            break
    return False

if contains_digits(s) == True:
    print s
else:
    print 'Error'

有没有更Python化或更简单的方法可以做到这一点?另外,我不能仅检查字符串是否为字母数字,因为字符串可能包含各种符号(’-‘,空格等)。


问题答案:

这是正则表达式仅此而已的地方之一:

_digits = re.compile('\d')
def contains_digits(d):
    return bool(_digits.search(d))

小样:

>>> _digits = re.compile('\d')
>>> def contains_digits(d):
...     return bool(_digits.search(d))
... 
>>> contains_digits('0798237 sh 523-123-asdjlh')
True
>>> contains_digits('sh asdjlh')
False

您可以使用@Wallacolloo的答案中所述的any方法,但这比简单的正则表达式要慢:.isdigit()

>>> import timeit
>>> timeit.timeit("contains_digits('0798237 sh 523-123-asdjlh')", 'from __main__ import contains_digits')
0.77181887626647949
>>> timeit.timeit("contains_digits_any('0798237 sh 523-123-asdjlh')", 'from __main__ import contains_digits_any')
1.7796030044555664

if方法与正则表达式相当:

>>> timeit.timeit("contains_digits_if('0798237 sh 523-123-asdjlh')", 'from __main__ import contains_digits_if')
0.87261390686035156

但是,如果数字出现在文本的后面,情况会变得更糟:

>>> timeit.timeit("contains_digits('asdjlhtaheoahueoaea 11 thou')", 'from __main__ import contains_digits')
1.202538013458252
>>> timeit.timeit("contains_digits_any('asdjlhtaheoahueoaea 11 thou')", 'from __main__ import contains_digits_any')
5.0348429679870605
>>> timeit.timeit("contains_digits_if('asdjlhtaheoahueoaea 11 thou')", 'from __main__ import contains_digits_if')
3.707183837890625

在Mac OS X 10.7上的python 2.6上测试了时序。



 类似资料:
  • 问题内容: 我在寻找Python中的方法。 我想要做: 问题答案: 你可以使用in运算符:

  • 问题内容: 我有一个输入字符串,将 要么 是JSON数据包,鼻翼: 或查询字符串,ala: 就我的目的而言,我需要 _ 始终 使用后一种格式。因此, _当 它是JSON数据时,我需要将其转换为查询字符串。这是用户输入的内容,因此我不能保证它会是另一个。 我正在使用jQuery,并且具有下面的代码,可以正常工作。我只是想知道是否有更好的方法来解决这个问题。 这里的逻辑是,如果字符串不是有效的JSON

  • 但应返回false 还有:我的代码高效吗?我觉得这是一个更容易的方法。如有任何帮助,不胜感激

  • 问题内容: 我发现的大多数问题都偏向于他们正在寻找数字中的字母这一事实,而我正在寻找我想成为无数字符串的数字。我需要输入一个字符串,并检查它是否包含任何数字以及是否确实拒绝它。 仅当所有字符均为数字时,该函数才返回。我只想看看用户是否输入了一个数字,例如“我拥有一只狗”之类的句子。 有任何想法吗? 问题答案: 你可以像这样使用函数和函数 另外,你可以使用正则表达式,如下所示

  • 问题内容: 我正在编写一个程序,其中用户以以下格式输入字符串: 我需要检查字符串中是否有数字 然后只提取数字。 如果我使用或,则无论输入的内容是什么,程序都无法在字符串中找到数字,但是仅在只有数字的情况下才能使用。 我可以使用什么作为查找和提取的解决方案? 问题答案: 我使用的解决方案如下所示: 我确信这不是一个完美的解决方案,但它满足了我的需求。谢谢大家的帮助。:)

  • 问题内容: 我想检查a是否仅包含数字。我用这个: 但意识到它也允许和。基本上,我要确保只能包含数字,而不能包含其他字符。由于和都是数字,所以不是正确的方法。也许我需要一个正则表达式?有小费吗? 问题答案: 怎么样