如何用正则表达式提取指定媒体扩展名的文件列表?
解决正则表达式提取媒体文件的问题
嘿,我来帮你搞定这个正则提取媒体文件的问题!你原来的正则确实有几个小问题,咱们一步步修正它:
原来正则的问题点
- 用了
^.*会匹配整行从开头到扩展名的所有内容,而不是单独的目标文件名 - 点号
.没有转义,在正则语法里.代表任意字符,所以.png其实会匹配“任意字符+png”,而不是真正的.png扩展名 - 正则表达式未完成,缺少闭合的括号和结尾匹配逻辑
正确的正则表达式写法
我们需要精准匹配以指定媒体扩展名结尾、由非空白字符组成的完整文件名,对应的正则可以写成:
r'\b\S+\.(?:png|jpg|jpeg|mp4|avi|flv)\b'
这里的关键细节:
\b:单词边界,确保我们匹配的是完整的文件名,不会从中间截断\S+:匹配一个或多个非空白字符,覆盖文件名(包括可能的路径前缀)\.:转义后的点号,匹配真正的扩展名分隔符(?:png|jpg|jpeg|mp4|avi|flv):非捕获分组,列出所有要匹配的媒体扩展名,避免findall只返回扩展名部分- 最后的
\b:确保扩展名后面没有多余的无效字符
完整可运行代码
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: ''' # 修正后的正则表达式 pattern = r'\b\S+\.(?:png|jpg|jpeg|mp4|avi|flv)\b' media_files = re.findall(pattern, st) # 打印提取结果 print("提取到的媒体文件列表:") for file in media_files: print(f"- {file}")
最终提取到的媒体文件列表
- 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
内容的提问来源于stack exchange,提问作者Sachhya
相关产品推荐
相关产品推荐

