正则表达式从文件名列表中查找图像序列

时间:2015-10-28 16:04:27

标签: python regex sequence negative-lookbehind

我需要一些正则表达式字符串的帮助来从先前生成的文件名列表中提取看起来可能是帧序列的一部分的任何文件名。

序列中的帧通常具有3的最小填充,并且将在'.''_'之前。例外是:如果文件名仅由数字组成并且.jpg扩展名(例如0001.jpg0002.jpg等)。如果可能的话,我想在一行正则表达式中捕获所有这些。

这是我到目前为止所拥有的:

(.*?)(.|_)(\d{3,})(.*)\.jpg

现在我知道这并不是"在._" 位之前,而是找到{{ 1}}或.字符串中的任何位置返回正数。我尝试了一些负面的后观测试,但无法使用该语法。

数据样本是:

_

之后的结果是确定了2个序列:

  1. test_canon_shot02.jpg test_shot01-04.jpg test_shot02-03.jpg test_shot02-02.jpg test_shot01-03.jpg test_canon_shot03.jpg test_shot01-02.jpg test_shot02.jpg test_canon_shot02.jpg test_shot01.jpg GameAssets_.00024.jpg GameAssets_.00023.jpg GameAssets_.00022.jpg GameAssets_.00021.jpg GameAssets_.00020.jpg GameAssets_.00019.jpg GameAssets_.00018.jpg GameAssets_.00017.jpg GameAssets_.00016.jpg GameAssets_.00015.jpg GameAssets_.00014.jpg GameAssets_.00013.jpg GameAssets_.00012.jpg GameAssets_.00011.jpg GameAssets_.00010.jpg GameAssets_.00009.jpg GameAssets_.00008.jpg GameAssets_.00007.jpg GameAssets_.00006.jpg GameAssets_.00005.jpg GameAssets_.00004.jpg GameAssets_.00003.jpg GameAssets_.00002.jpg GameAssets_.00001.jpg GameAssets_.00000.jpg OrangeXmas2015_Print_A ct2.jpg sh120_HF_V01-01.jpg sh120_HF_V01-02.jpg sh200_DMP_v04.jpg sh120_HF_V04.jpg sh120_HF_V03.jpg sh120_HF_V02.jpg blah_v02.jpg blah_v01.jpg blah_Capture0 4.jpg blah_Capture03 .jpg blah_Capture01. jpg blah_Capture02.jpg Wall_GraniteBlock_G rey_TC041813.jpg Renders10_wire.jpg Renders10.jpg Renders09_wire.jpg Renders09.jpg Renders08_wire.jpg Renders08.jpg Renders07_wire.jpg Renders07.jpg Renders06_wire.jpg Renders06.jpg Renders05_wire.jpg Renders05.jpg Renders04_wire.jpg Renders04.jpg Renders03_wire.jpg Renders03.jpg Renders02_wire.jpg Renders02.jpg Renders01_wire.jpg Renders01.jpg archmodels58_057_carpinusbetulus_leaf_diffuse.jpg archmodels58_042_bark_bump.jpg archmodels58_023_leaf_diffuse.jpg WINDY TECHNICZNE-reflect00.jpg archmodels58_057_leaf_opacity.jpg archmodels58_057_bark_reflect.jpg archmodels58_057_bark_bump.jpg blahC-00-oknaka.jpg bed debt cab 00018.jpg 00017.jpg 00016.jpg 00015.jpg 00014.jpg 00013.jpg 00012.jpg 00011.jpg 00010.jpg 00009.jpg 00008.jpg 00007.jpg 00006.jpg 00005.jpg 00004.jpg 00003.jpg 00002.jpg 00001.jpg 00000.jpg GameAssets_.00000.jpg
  2. GameAssets_.00024.jpg00000.jpg

3 个答案:

答案 0 :(得分:1)

根据您在问题中指定的规则,此模式应该可以满足您的需求:

(^|\r?\n|.*_|.*\.)\d{3,}.*\.jpg

答案 1 :(得分:0)

for item in re.findall(r'.*?[._]?0{3,}.*',data):
    print(item)

GameAssets_.00024.jpg
GameAssets_.00023.jpg
GameAssets_.00022.jpg
GameAssets_.00021.jpg
GameAssets_.00020.jpg
GameAssets_.00019.jpg
GameAssets_.00018.jpg
GameAssets_.00017.jpg
GameAssets_.00016.jpg
GameAssets_.00015.jpg
GameAssets_.00014.jpg
GameAssets_.00013.jpg
GameAssets_.00012.jpg
GameAssets_.00011.jpg
GameAssets_.00010.jpg
GameAssets_.00009.jpg
GameAssets_.00008.jpg
GameAssets_.00007.jpg
GameAssets_.00006.jpg
GameAssets_.00005.jpg
GameAssets_.00004.jpg
GameAssets_.00003.jpg
GameAssets_.00002.jpg
GameAssets_.00001.jpg
GameAssets_.00000.jpg
00018.jpg
00017.jpg
00016.jpg
00015.jpg
00014.jpg
00013.jpg
00012.jpg
00011.jpg
00010.jpg
00009.jpg
00008.jpg
00007.jpg
00006.jpg
00005.jpg
00004.jpg
00003.jpg
00002.jpg
00001.jpg
00000.jpg

答案 2 :(得分:0)

尝试

(.*?)(\.|_?)(000\d{0,})(.*)\.jpg

请注意,我必须逃离第二组中的'.'。另外,我必须在第二组中搜索'.''_'可选项。最后,我必须将最小填充添加到第三组。

我使用regex101.com来测试和优化正则表达式:regex101