8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

检查字符串是否包含数字

maxew 2月前

273 0

我发现大多数问题都有偏见,因为他们在数字中寻找字母,而我在我想要的无数字字符串中寻找数字。我需要输入一个 s...

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

,该函数 isdigit() 才会返回 True 。我只想看看用户是否输入了数字,所以像这样的句子 "I own 1 dog" 或类似的东西。

有任何想法吗?

帖子版权声明 1、本帖标题:检查字符串是否包含数字
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由maxew在本站《string》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您可以使用 any 函数,与 str.isdigit 函数一起使用,如下所示

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

    或者你也可以使用正则表达式,像这样

    import re
    def has_numbers(inputString):
        return bool(re.search(r'\d', inputString))
    
    has_numbers("I own 1 dog")
    # True
    has_numbers("I own no dog")
    # False
    
  • @thefourtheye:-1 仍然是数字。它是一个破折号,后面跟着数字“1”

  • any 的组合 str.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
    
  • 使用 Python 方法 str.isalpha() 。如果字符串中的所有字符都是字母且至少有一个字符,则此函数返回 True;否则返回 False。

    Python 文档: https://docs.python.org/3/library/stdtypes.html#str.isalpha

  • 除了字母和数字之外,还有其他类型的字符 - 例如,'_'.isalpha() 是 False。

  • 像 'ç' 和 'ñ' 这样的字符将不会被识别。例如,字符 'œ' 出现在中世纪英语文本中。

  • 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
    
  • RE_D = re.compile('\d') def has_digits(string): res = RE_D.search(string) 返回 res 不为 None

  • @Raul f2 和 f3 如果匹配则返回 re.Match 对象,否则返回 None。要获取布尔值,只需包装结果 bool(re. ...)

  • 您可以对字符串中的每个字符应用函数 isdigit()。或者您可以使用正则表达式。

    我还发现了 如何在 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,000 将返回为 10。0207-100-1000 将返回为 0207。

    第二种方法不起作用。

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

    re.sub('[^\d.,]' , '', yourString)
    
  • 引用 12

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

    import re    
    
    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 在答案中提出的解决方案中基准最快的解决方案。

  • Ike 2月前 0 只看Ta
    引用 13

    我很惊讶没有人提到这种 any map

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

    在 python 3 中它可能是最快的(也许除了正则表达式)是因为它不包含任何循环(并且函数别名避免在中查找它 str )。

    不要在 Python 2 中使用它,因为 map 返回 a list ,这会破坏 any 短路

  • 您还可以使用 set.intersection,它非常快,对于小字符串来说比正则表达式更好。

    def contains_number(string):
        return True if set(string).intersection('0123456789') else False
    
  • 另外,您可以使用正则表达式 findall。这是一个更通用的解决方案,因为它增加了对数字长度的更多控制。在您需要长度最小的数字的情况下,它可能很有用。

    s = '67389kjsdk' 
    contains_digit = len(re.findall('\d+', s)) > 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 循环,我们保证了此事件的发生。

  • mrek 2月前 0 只看Ta
    引用 18

    这也能起作用。

    if any(i.isdigit() for i in s):
        print("True")
    
  • 欢迎来到 Stack Overflow!您介意为不知道的人解释一下这段代码的作用吗?另外,请对您的代码进行评论。您应该将其设为一个函数,有一个测试字符串,并且不要打印 True,而是返回 True,如果没有数字则返回 False。谢谢!

  • 您可以使用 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.')
    
返回
作者最近主题: