以除空格以外的任何字符开头,以扩展名结尾,例如(.png、.jpg、.mp4、.avi、.flv)

2024-04-25 15:13:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要得到所有的媒体扩展名为(.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

我对正则表达式知之甚少请帮忙。你知道吗


Tags: txtdatapngconsumertagscontenttmpmp4
3条回答

试试这个:

patt = '[^ \n]+?\.(?:png|jpg|gif|bmp|jpeg|mp4|avi|flv)'

[^ \n]是一个取反字符类,不允许空格或换行符。你知道吗

点(.)是一个特殊字符,需要用反斜杠转义。你知道吗

在线试用here。你知道吗

^.*(.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

您可以使用RegEx ^{}

  • \S+匹配任何非空白字符至少一次

  • \.匹配一个点

  • (?: ... )是非捕获组

  • (png|jpg|gif|bmp|jpeg|mp4|avi|flv匹配您定义的扩展

Demo.

相关问题 更多 >