1

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

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

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

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

现在我知道这不会执行“前面的._位,而只是在字符串中找到 a._任何地方以返回正数。我尝试了一些负面的后视测试,但无法使语法正常工作。

数据样本是:

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    

我追求的结果是确定了 2 个序列:

  1. GameAssets_.00000.jpgGameAssets_.00024.jpg
  2. 00000.jpg00018.jpg
4

3 回答 3

1

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

(^|\r?\n|.*_|.*\.)\d{3,}.*\.jpg
于 2015-10-28T16:23:10.903 回答
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
于 2015-10-28T16:24:31.677 回答
0

尝试

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

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

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

于 2015-10-28T16:53:19.013 回答