如何在Python中从字符串中找到一个数字?

11

我有一个名为FILE-1.txt或FILE-340.txt的文件。我想从文件名中获取数字。我发现可以使用

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

要获取一个包含数字的列表,使用numbers[0]来获取该数字本身的字符串...但如果我知道它只是一个数字,那么创建一个列表似乎是迂回和不必要的。有其他方法可以做到这一点吗?


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


2
我理解得对吗,'%s' %(filename) 是将一个字符串转换为字符串?如果 filename 是一个字符串,那么只需用 filename 替换 '%s' %(filename) - Tadeck
补充Tadeck的评论,如果filename不是字符串,则str(filename)等同于'%s' % filename - Andrew Clark
5个回答

19

使用 search 替代 findall

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

或者:

number = filter(str.isdigit, filename)

1
尽管在存在多组数字的情况下,例如使用“FILE-340-1.txt”,filter 更类似于 re.findall,它会产生 "3401",而 re.search 只返回第一组 "340"。 - Matthew Wilcoxson

2

补充F.J的评论,如果你想要一个整数,你可以使用:

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

1
如果你想让你的程序更有效,使用这个:
num = filename.split("-")[1][:-4]

这只适用于你展示的那个例子


1
它会从分割后的第二部分中取出,并切掉最后4个字符 [".txt"]。 - Oded BD

1

另一种只是为了好玩:

In [1]: fn = 'file-340.txt'

In [2]: ''.join(x for x in fn if x.isdigit())
Out[2]: '340'

0
作为对你的新问题的回答,你可以将 string 转换为 int
>>>int('123')
123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接