我有很长的字符串列表;它们基本上是文件名。格式如下:
["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)不固定,并由用户提供输入。
答案 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