我有一个名为FILE-1.txt或FILE-340.txt的文件。我想从文件名中获取数字。我发现可以使用
numbers = re.findall(r'\d+', '%s' %(filename))
要获取一个包含数字的列表,使用numbers[0]来获取该数字本身的字符串...但如果我知道它只是一个数字,那么创建一个列表似乎是迂回和不必要的。有其他方法可以做到这一点吗?
编辑:谢谢!我现在又有一个问题。如何获取整数而不是字符串?
使用 search
替代 findall
:
number = re.search(r'\d+', filename).group()
或者:
number = filter(str.isdigit, filename)
filter
更类似于 re.findall
,它会产生 "3401",而 re.search
只返回第一组 "340"。 - Matthew Wilcoxson补充F.J的评论,如果你想要一个整数,你可以使用:
numbers = int(re.search(r'\d+', filename).group())
num = filename.split("-")[1][:-4]
这只适用于你展示的那个例子
另一种只是为了好玩:
In [1]: fn = 'file-340.txt'
In [2]: ''.join(x for x in fn if x.isdigit())
Out[2]: '340'
string
转换为 int
:>>>int('123')
123
'%s' %(filename)
是将一个字符串转换为字符串?如果filename
是一个字符串,那么只需用filename
替换'%s' %(filename)
。 - Tadeckfilename
不是字符串,则str(filename)
等同于'%s' % filename
。 - Andrew Clark