**问题**我试图逐行搜索我已添加到数组文件名的文件,并使用通配符(如* .mxf)打印包含filename.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
答案 0 :(得分:0)
您尝试的几个不同问题:
通配符(或glob
)模式与正则表达式不同。
在正则表达式中,*
匹配表达式中前一项的0或更多项。如果*
出现在表达式的开头(或子表达式,如括号中的子表达式或分隔多个子表达式的交替|
运算符),则它没有特殊含义,只匹配{{1} } character。
*
因此,是一个正则表达式,其具有与文字字符串pattern = "(*.mxf)"
匹配的带括号的子表达式。您可以使用*.mxf
代替.*
来匹配任意数量的任何非换行符,或*
以匹配任意数量的非路径分隔符。
[^/]*
是非法的(re.match(pattern, '\')
会转义以下\
,因此您最终会收到未终止的字符串。
即使您将其修复为'
,您每次都会将模式与固定字符串re.match(patterh, '\\')
进行匹配。我假设你真正想要的是
\
为了返回matching = [s for s in rasp if re.match(pattern, s)]
中与rasp
中的正则表达式匹配的每个项目的列表。
您最好的解决方案可能是使您的模式成为真正的文件名为glob模式(pattern
)并使用python的pattern = "*.mxf"
模式检查器:
fnmatch