【问题标题】:Python - Check if the last characters in a string are numbersPython - 检查字符串中的最后一个字符是否是数字
【发布时间】:2013-01-06 10:16:51
【问题描述】:

基本上我想知道我会怎么做。

这是一个示例字符串:

string = "hello123"

我想知道如何检查字符串是否以数字结尾,然后打印字符串结尾的数字。

我知道对于这个特定的字符串,您可以使用正则表达式来确定它是否以数字结尾,然后使用 string[:] 选择“123”。但是如果我正在循环一个带有这样字符串的文件:

hello123
hello12324
hello12435436346

...由于数字长度的差异,我将无法使用 string[:] 选择数字。我希望我能清楚地解释我需要什么来帮助你们。谢谢!

【问题讨论】:

    标签: python regex string numbers


    【解决方案1】:

    这不考虑字符串中间的任何内容,但它基本上表示如果最后一个数字是数字,则以数字结尾。

    In [4]: s = "hello123"
    
    In [5]: s[-1].isdigit()
    Out[5]: True
    

    用几个字符串:

    In [7]: for s in ['hello12324', 'hello', 'hello1345252525', 'goodbye']:
       ...:     print s, s[-1].isdigit()
       ...:     
    hello12324 True
    hello False
    hello1345252525 True
    goodbye False
    

    我完全完全支持正则表达式解决方案,但这里有一种(不是很漂亮)可以获取数字的方法。同样,正则表达式在这里要好得多:)

    In [43]: from itertools import takewhile
    
    In [44]: s = '12hello123558'
    
    In [45]: r = s[-1::-1]
    
    In [46]: d = [c.isdigit() for c in r]
    
    In [47]: ''.join((i[0] for i in takewhile(lambda (x, y): y, zip(r, d))))[-1::-1]
    Out[47]: '123558'
    

    【讨论】:

    • 我会使用s and s[-1].isdigit(),这样它就不会为空字符串抛出IndexError
    • 我需要找到字符串末尾的实际数字并打印该数字,而不是打印“数字”。在这种情况下,它需要识别字符串以“123”结尾,然后打印出来
    • 注意:即使int(s) 失败,s.isdigit() 也可能返回 True。
    • @user2002290 Gotcha - 添加了一个小更新,但完全支持您选择的答案:)
    • 赞成 - 这是一个比所选答案更优雅的答案。赞一个!
    【解决方案2】:
    import re
    m = re.search(r'\d+$', string)
    # if the string ends in digits m will be a Match object, or None otherwise.
    if m is not None:
        print m.group()
    

    \d 匹配一个数字,\d+ 表示匹配一个或多个数字(贪心:匹配尽可能多的连续数字)。而$ 表示匹配字符串的结尾。

    【讨论】:

      【解决方案3】:

      另一种解决方案:

      a = "abc1323"
      b = ""
      for c in a[::-1]:
          try:
              b += str(int(c))
          except: 
              break
      
      print b[::-1]
      

      【讨论】:

        【解决方案4】:

        如果字符串以非数字结尾,则此字符串将简单地返回一个空字符串。

        import re
        re.split('[^\d]', str)[-1]
        

        由于空字符串是falsy,所以可以重载含义:

        def getNumericTail(str):
            re.split('[^\d]', str)[-1]
        
        def endsWithNumber(str):
            bool(getNumericTail(str))
        

        【讨论】:

          【解决方案5】:

          另一种解决方案:查看您可以去除多少个 0-9 位 string 的末尾,并使用该长度作为 string 的索引来拆分数字。 (如果 string 不以数字结尾,则返回 '')。

          In [1]: s = '12hello123558'
          
          In [2]: s[len(s.rstrip('0123456789')):]
          Out[2]: '123558'
          

          【讨论】:

            猜你喜欢
            • 2018-10-15
            • 1970-01-01
            • 2020-07-15
            • 1970-01-01
            • 2023-03-28
            • 1970-01-01
            • 2019-05-11
            • 2011-02-03
            相关资源
            最近更新 更多