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

检查字符串是否包含数字

maxew 2月前

274 0

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

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

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

有任何想法吗?

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

    foo = '1dfss3sw235fsf7s'
    bar = 'lorem ipsum sit dolor amet'
    
    def contains_number(string):
        for i in range(10):
            if str(i) in list(string):
                return True
        return False
    
    print(contains_number(foo)) #True
    print(contains_number(bar)) #False
    

    或者我们可以使用这个函数 isdigit()

    foo = '1dfss3sw235fsf7s'
    bar = 'lorem ipsum sit dolor amet'
    
    def contains_number(string):
        for i in list(string):
            if i.isdigit():
                return True
        return False
    
    print(contains_number(foo)) #True
    print(contains_number(bar)) #False
    

    这些函数基本上只是转换 s 成一个列表,并检查列表是否包含数字。如果包含,则返回 True ,如果不包含,则返回 False .

  • 一种迭代器方法。除非满足数字,否则它会消耗所有字符。fix 的第二个参数是 next 迭代器为“空”时返回的默认值。在这种情况下,它设置为 False but 也 '' 有效,因为它在 if .

    def has_digit(string):
        str_iter = iter(string)
        while True:
            char = next(str_iter, False)
            # check if iterator is empty
            if char:
                if char.isdigit():
                    return True
            else:
                return False
    

    或者只看生成器推导的第一项

    def has_digit(string):
        return next((True for char in string if char.isdigit()), False)
    
  • Delm 2月前 0 只看Ta
    引用 4

    如果您要检查 df 列中的值是否包含任何数字:

    df['x'].str.contains(r'\d', regex=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)
    

    这将返回所有包含字母和数字的字符串。i​​salpha() 返回包含全部数字或全部字符的字符串。

  • 欢迎来到 Stack Overflow!请不要只是将您的源代码扔在这里。请尽量对您的答案进行良好的描述,以便其他人会喜欢它并为其点赞。请参阅:如何写出好的答案?

  • 更简单的解决方法是

    s = '1dfss3sw235fsf7s'
    count = 0
    temp = list(s)
    for item in temp:
        if(item.isdigit()):
            count = count + 1
        else:
            pass
    print count
    
  • 您可以按照如下方式完成此操作:

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

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

    使用 .isdigit() 还意味着 在需要使用列表推导式(列表推导式中无法使用 try/except)的情况下不必 诉诸异常处理

  • Ilia 2月前 0 只看Ta
    引用 9

    请不要只是把你的源代码扔在这里。请友善地尝试为你的答案提供一个很好的描述,以便其他人会喜欢它并点赞它。请参阅:如何写出好的答案?

  • 这个如何?

    import string
    
    def containsNumber(line):
        res = False
        try:
            for val in line.split():
                if (float(val.strip(string.punctuation))):
                    res = True
                    break
        except ValueError:
            pass
        return res
    
    containsNumber('234.12 a22') # returns True
    containsNumber('234.12L a22') # returns False
    containsNumber('234.12, a22') # returns True
    
  • any 并且 ord 可以组合起来达到如下所示的目的。

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

    2. p3

  • rois 2月前 0 只看Ta
    引用 12

    这看起来非常不高效。对于每个字符,你都要循环 0-10,然后线性扫描字符串,多次遍历字符...只需使用 isdigit()

  • 您可以使用带有计数的范围来检查数字在字符串中出现的次数,方法是根据范围进行检查:

    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 方法。

    这将在文本中找到“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.')
    
  • 欢迎来到 Stack Overflow!您介意为不知道的人解释一下这段代码的作用吗?另外,请对您的代码进行评论。您应该将其设为一个函数,有一个测试字符串,并且不要打印 True,而是返回 True,如果没有数字则返回 False。谢谢!

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

    这也能起作用。

    if any(i.isdigit() for i in s):
        print("True")
    
  • 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 循环,我们保证了此事件的发生。

  • 问题很明确,并没有说明需要控制数字的长度。你在这里回答的是另一个问题。如果你有改进建议,请点赞或发表评论。

  • 另外,您可以使用正则表达式 findall。这是一个更通用的解决方案,因为它增加了对数字长度的更多控制。在您需要长度最小的数字的情况下,它可能很有用。

    s = '67389kjsdk' 
    contains_digit = len(re.findall('\d+', s)) > 0
    
  • 您还可以使用 set.intersection,它非常快,对于小字符串来说比正则表达式更好。

    def contains_number(string):
        return True if set(string).intersection('0123456789') else False
    
返回
作者最近主题: