Skip to main content
 首页 » 编程设计

python之以除空格以外的任何内容开头,以扩展名(.png、.jpg、.mp4、.avi、.flv)结尾

2025年05月04日14duanxz

我需要使用正则表达式在列表中获取所有带有媒体扩展名(.png、.jpg、.mp4、.avi、.flv)的文件。我试过的是下面

import re 
st = ''' 
/mnt/data/Content: 
ManifestFile.txt                               kompass-tags_e2d5dac5ba548a1206b5d40f58e448e4  tmp_content 
default_55a655f340908dce55d10a191b6a0140       price-tags_b3c756dda783ad0691163a900fb5fe15 
 
/mnt/data/Content/default_55a655f340908dce55d10a191b6a0140: 
LayoutFile_34450b33c8b44af409abb057ddedfdfe.txt  blank_decommissioned.jpeg                         tmp_content 
ManifestFile.txt                                 blank_unregistered.png 
 
/mnt/data/Content/default_55a655f340908dce55d10a191b6a0140/tmp_content: 
 
/mnt/data/Content/kompass-tags_e2d5dac5ba548a1206b5d40f58e448e4: 
0001111084948-kompass-LARGE.avi                  0076738703404-kompass-LARGE.png                  LayoutFile_7c1b3793e49204982e0e41923303c17b.txt 
0001111087321-kompass-LARGE.jpg                  0076738703419-kompass-LARGE.mp4                  ManifestFile.txt 
0001111087325-kompass-LARGE.png                  0076738703420-kompass-LARGE.png                  tmp_content 
 
/mnt/data/Content/kompass-tags_e2d5dac5ba548a1206b5d40f58e448e4/tmp_content: 
 
/mnt/data/Content/price-tags_b3c756dda783ad0691163a900fb5fe15: 
0001111084948-consumer-large.png                 0076738703404-consumer-large.png                 LayoutFile_a694b1e05d08705aaf4dd589ac61d493.txt 
0001111087321-consumer-large.png                 0076738703419-consumer-large.avi                 ManifestFile.txt 
0001111087325-consumer-large.mp4                 0076738703420-consumer-large.png                 tmp_content 
 
/mnt/data/Content/price-tags_b3c756dda783ad0691163a900fb5fe15/tmp_content: 
 
/mnt/data/Content/tmp_content: 
 
''' 
patt = '^.*(.png|.jpg|.gif|.bmp|.jpeg|.mp4|.avi|.flv)' 
patt = '^.*$.png' 
 
fList = re.findall(patt, st) 
print fList 

我不太了解正则表达式,请帮忙。

请您参考如下方法:

^.*(.png|.jpg|.gif|.bmp|.jpeg|.mp4|.avi|.flv) 模式匹配字符串的开头,然后是任何 0 + 尽可能多的除换行符以外的字符,然后是在它们之前带有任何单个字符的扩展名(未转义的 . 匹配除换行符之外的任何字符)。所以,这对你不起作用,因为 . 在这里匹配太多,而 ^ 只在字符串的开头产生匹配。

^.*$.png 模式只匹配字符串的开头,除换行符之外的任何 0+ 个字符,然后是字符串的结尾和任何字符 + png - 这是一个永远不会匹配任何字符串的模式。

根据你的描述判断你需要

patt = r'\S+\.(?:png|jpe?g|gif|bmp|mp4|avi|flv)\b' 

参见 regex demo .

详情

  • \S+ - 1+ 个非空白字符
  • \. - 文字点
  • (?:png|jpe?g|gif|bmp|mp4|avi|flv) - 一个非捕获组(即它捕获的内容不会是返回列表的一部分re.findall) 匹配任何提到的扩展名
  • \b - 单词边界(实际上,它是可选的,但它会确保您将上面的扩展名匹配为整个单词)。

参见 Python demo :

import re 
st = '<YOUR_STRING_HERE>' 
patt = r'\S+\.(?:png|jpe?g|gif|bmp|mp4|avi|flv)\b'     
fList = re.findall(patt, st) 
for s in fList: 
    print(s) 

屈服

blank_decommissioned.jpeg 
blank_unregistered.png 
0001111084948-kompass-LARGE.avi 
0076738703404-kompass-LARGE.png 
0001111087321-kompass-LARGE.jpg 
0076738703419-kompass-LARGE.mp4 
0001111087325-kompass-LARGE.png 
0076738703420-kompass-LARGE.png 
0001111084948-consumer-large.png 
0076738703404-consumer-large.png 
0001111087321-consumer-large.png 
0076738703419-consumer-large.avi 
0001111087325-consumer-large.mp4 
0076738703420-consumer-large.png