Python:如何检查字符串是否包含特定范围内的数字

时间:2016-01-05 07:12:22

标签: python regex string pattern-matching

我有很长的字符串列表;它们基本上是文件名。格式如下:

["abcdedf_023.txt",
 "foeoioo_011.txt", 
 "sdjskdsjd_3131.txt", 
 "dsdsdsrer_044.txt", 
 "rgfbfgrt_12.txt"]

等等。

我需要的是在结尾处过滤掉包含大于15的数字的名称。因此,通过上述输入,所需的输出将是:

["abcdedf_023.txt",
 "sdjskdsjd_3131.txt", 
 "dsdsdsrer_044.txt"] 

此号码(15)不固定,并由用户提供输入。

2 个答案:

答案 0 :(得分:5)

如下所示?只需使用\d+搜索数字?

[i for i in l if int(re.search('\d+', i).group(0)) > 15]

演示:

["abcdedf_023.txt", "sdjskdsjd_3131.txt", "dsdsdsrer_044.txt"]

您还可以搜索_(\d+).txt(使用()来抓住数字):

[i for i in f if int(re.search('_(\d+).txt', i).group(1)) > 15]

要删除文件中的"abc122dedf_01.txt"之类的内容(如果您不想要的话)。

如果您只需要文件名中的最后两个数字,例如从03获取1203

[i for i in f if int(re.search('\d+', i).group(0)[-2:]) > 15]

答案 1 :(得分:2)

我会使用split

>>> l = ["abcdedf_023.txt",
"foeoioo_011.txt", 
"sdjskdsjd_3131.txt", 
"dsdsdsrer_044.txt", 
"rgfbfgrt_12.txt"]
>>> [i for i in l if int(i.split('.')[0].split('_')[-1]) > 15 ]
['abcdedf_023.txt', 'sdjskdsjd_3131.txt', 'dsdsdsrer_044.txt']

将上面列表理解中的15替换为实际包含要检查的数字的变量。请注意,变量必须是interger类型,或者在条件检查期间将其转换为int