【问题标题】:How do I find one number in a string in Python?如何在 Python 中的字符串中找到一个数字?
【发布时间】:2011-11-22 22:17:23
【问题描述】:

我有一个类似 FILE-1.txt 或 FILE-340.txt 的文件。我希望能够从文件名中获取数字。我发现我可以使用

numbers = re.findall(r'\d+', '%s' %(filename))

获取包含数字的列表,并使用 numbers[0] 将数字本身作为字符串获取...但是如果我知道它只是一个数字,则似乎迂回且没有必要制作列表来获取它。有没有其他方法可以做到这一点?


编辑:谢谢!我想现在我还有另一个问题。我如何获取整数而不是获取字符串?

【问题讨论】:

  • 我是否理解正确,'%s' %(filename) 您正在将字符串转换为字符串?如果filename 是一个字符串,那么只需将'%s' %(filename) 替换为filename
  • 添加到 Tadeck 的注释中,如果 filename 不是字符串,则 str(filename) 等效于 '%s' % filename

标签: python string


【解决方案1】:

使用search 代替findall

number = re.search(r'\d+', filename).group()

或者:

number = filter(str.isdigit, filename)

【讨论】:

  • 虽然filter 在有多组数字的情况下更类似于re.findall,例如使用 "FILE-340-1.txt" filter 产生 "3401"re.search 只返回第一组 "340" .
【解决方案2】:

添加到F.J的评论,如果你想要一个int,你可以使用:

numbers = int(re.search(r'\d+', filename).group())

【讨论】:

    【解决方案3】:

    如果您希望您的程序有效

    使用这个:

    num = filename.split("-")[1][:-4]
    

    这仅适用于您展示的示例

    【讨论】:

    • 从拆分中取出第二部分,然后剪切最后4个字符[“.txt”]
    【解决方案4】:

    另一种娱乐方式:

    In [1]: fn = 'file-340.txt'
    
    In [2]: ''.join(x for x in fn if x.isdigit())
    Out[2]: '340'
    

    【讨论】:

      【解决方案5】:

      针对您的新问题,您可以将string 转换为int

      >>>int('123')
      123
      

      【讨论】:

        猜你喜欢
        • 2012-08-30
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        相关资源
        最近更新 更多