**问题**我试图逐行搜索已添加到数组文件名中的文件,并使用通配符(如filename.mxf )打印包含*.mxf的任何字符串。文件中的行将是\E:\AVMedia\filename.mxf。我只想在变量(匹配)中列出filename.mxf。
## opens files in array ##
print name #debug#
file = open(os.path.join(path,filename), 'r')
#print file.read()
## search for all strings containing .mxf from array ##
## create regular expression ##
pattern = "(*.mxf)"
matching = [s for s in rasp if re.match(pattern, '\')]
print matching发布于 2016-09-22 16:10:26
你的尝试有几个不同的问题:
glob)模式与正则表达式不同。
在正则表达式中,*匹配表达式中的前一项中的0项或更多项。如果*出现在表达式的开头(或子表达式,如括号内的子表达式或分隔多个子表达式的交替|运算符中),则它没有特殊意义,只匹配*字符。
模式= "(*.mxf)“
因此,是一个正则表达式,该表达式具有一个括号大小的子表达式,该表达式与文字字符串*.mxf匹配。您可以使用.*而不是*来匹配任意数量的非换行符,或者使用[^/]*来匹配任意数量的非路径分隔符。re.match(pattern, '\')是非法的( \转义下面的',因此您将得到一个未终止的字符串)。re.match(patterh, '\\'),每次也将您的模式与固定的字符串\进行匹配。我想你真正想要的是
如果re.match(模式,s)在rasp中匹配s=s
为了返回rasp中与pattern中的正则表达式匹配的每个项的列表。最好的解决方案可能是使模式成为真正的文件名glob模式(pattern = "*.mxf"),并使用python的fnmatch模式检查器:
import fnmatch
import os.path
pattern = "*.mxf"
matching = [os.path.basename(s) for s in rasp if fnmatch.fnmatch(s, pattern)]
print matchinghttps://stackoverflow.com/questions/39636874
复制相似问题