2011-11-22 87 views
11

我有一个文件叫做FILE-1.txt或FILE-340.txt。我希望能够从文件名获得编号。我发现我可以使用如何在Python中的字符串中找到一个数字?

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

获得包含数字的列表,并使用数字[0]来获得自身的数量作为一个字符串...但如果我知道这只是一个数字,看起来很迂回,没有必要做一个清单来获得它。有没有另一种方法来做到这一点?


编辑:谢谢!我想现在我有另一个问题。而不是得到一个字符串,我怎么得到整数?

+2

我是否正确理解这一点,通过''%s'%(filename)'将字符串转换为字符串?如果'filename'是一个字符串,那么只需将'%s'%(filename)'替换为'filename'。 – Tadeck

+0

添加到Tadeck的评论,如果'filename'不是一个字符串,那么'str(文件名)'相当于''%s'%filename'。 –

回答

18

使用search代替findall

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

或者:

number = filter(str.isdigit, filename) 
+1

尽管在有多个数字组的情况下,“过滤器”更类似于“re.findall”,使用_“FILE-340-1.txt”_'filter'生成_“3401”_而're.search'只返回第一个组_“340”_。 –

1

如果你希望你的程序是有效的

使用本:

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

这将只为您显示

+0

[1] [: - 4]做了什么? – user1058492

+1

它是从分裂的第二部分,并削减最后4个字符[“。txt”] – Davido

1

另一种方式只是为了好玩的例子:

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

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

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

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

在回答您的新问题,就可以把stringint

>>>int('123') 
123 
相关问题