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

标签 python regex string

我需要使用正则表达式在列表中获取所有带有媒体扩展名(.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/

相关文章:

python - Kivy 不工作,MESA-LOADER : failed to open iris and swrast

python gui 事件乱序

php - 考虑下一个字符的正则表达式

Python正则表达式查找子字符串

python - 将等于 json 字典的字典转换

python - 如何在 RPy 中使用 smooth.spline 的 lambda 参数而无需 Python 将其解释为 lambda

Python如何根据子字符串过滤字符串

regex - 如何衡量字符串之间的相似度?

c# - 换行符未添加到字符串

json - 将 Perl 字符串转换为 json 数组