python中的正则表达式基于匹配文件名的开头和结尾对文件进行分组

时间:2017-07-06 11:50:57

标签: regex python-3.x

我有一堆jpg文件,其名称如下:

1_fileid1_1.jpg
2_fileid1_1.jpg
1_fileid1_2.jpg
2_fileid1_2.jpg
...
1_fileidn_m.jpg
2_fileidn_m+1.jpg

第一个数字来自2个部分的序列,因此id为fileid1的文件的第1部分以1_开头,第2部分以2_开头。最后一个数字是页面,因为这些是从文档创建的图像文件,因此_1是第1页,_2是第2页,依此类推。页面可以是任意数字,但每页的部分总是只有2个。

现在我想读取这些文件,以便我可以按顺序将它们分组,可能在元组或列表中,这样序列应该类似于。

seq1 = (1_fileid1_1.jpg, 2_fileid1_1.jpg)
seq2 = (1_fileid1_2.jpg, 2_fileid1_2.jpg)
...
seqx = (1_fileidn_m.jpg, 2_fileidn_m.jpg)

每个文件的每个页面都是不同的序列。

在python中有一种简单的方法吗?也许使用re.match?但是我怎样才能确保一个序列中的两个文件具有相同的结尾,即_1.jpg(包括.jpg是有用的,因为那样我可以避免其他类型的文件)。

编辑: 如果文件在不同的行上,Rizman的解决方案可以正常工作。如果文件的名称一起列在列表中并与文件的路径一起怎么办?像这样:

../path/to/file1/1_file1_1.jpg/path/to_file2/2_file1_1.jpg...

我尝试修改Rizwan的解决方案:https://regex101.com/r/HvzkwL/5/

但它不起作用。

1 个答案:

答案 0 :(得分:1)

  

根据操作帖子中的更改进行了更新:

使用它:

(.*?/\d+(_.*?\.jpg))(.*?/)(\d+)\2

并替换为:

\($1,$3$4$2\)

Updated Demo

您可以尝试这种方法:

(\d+(_[^\.]+\.jpg))\n(\d+)\2

并替换为:

($1,$3$2)

Regex101Demo