我需要使用正则表达式在列表中获取所有带有媒体扩展名(.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
关于python - 以除空格以外的任何内容开头,以扩展名(.png、.jpg、.mp4、.avi、.flv)结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446661/