在变量数组中搜索通配符和字符串

时间:2016-09-22 10:42:52

标签: arrays regex python-2.7

**问题**我试图逐行搜索我已添加到数组文件名的文件,并使用通配符(如* .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

1 个答案:

答案 0 :(得分:0)

您尝试的几个不同问题:

  1. 通配符(或glob)模式与正则表达式不同。

    在正则表达式中,*匹配表达式中前一项的0或更多项。如果*出现在表达式的开头(或子表达式,如括号中的子表达式或分隔多个子表达式的交替|运算符),则它没有特殊含义,只匹配{{1} } character。

    *
    因此,

    是一个正则表达式,其具有与文字字符串pattern = "(*.mxf)" 匹配的带括号的子表达式。您可以使用*.mxf代替.*来匹配任意数量的任何非换行符,或*以匹配任意数量的非路径分隔符。

  2. [^/]*是非法的(re.match(pattern, '\')会转义以下\,因此您最终会收到未终止的字符串。

  3. 即使您将其修复为',您每次都会将模式与固定字符串re.match(patterh, '\\')进行匹配。我假设你真正想要的是

    \

    为了返回matching = [s for s in rasp if re.match(pattern, s)] 中与rasp中的正则表达式匹配的每个项目的列表。

  4. 您最好的解决方案可能是使您的模式成为真正的文件名为glob模式(pattern)并使用python的pattern = "*.mxf"模式检查器:

    fnmatch