首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在变量数组中搜索通配符和字符串

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

Stack Overflow用户
提问于 2016-09-22 10:42:52
回答 1查看 1K关注 0票数 0

**问题**我试图逐行搜索已添加到数组文件名中的文件,并使用通配符(如filename.mxf )打印包含*.mxf的任何字符串。文件中的行将是\E:\AVMedia\filename.mxf。我只想在变量(匹配)中列出filename.mxf。

代码语言:javascript
复制
## 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-22 16:10:26

你的尝试有几个不同的问题:

  1. 通配符(或glob)模式与正则表达式不同。 在正则表达式中,*匹配表达式中的前一项中的0项或更多项。如果*出现在表达式的开头(或子表达式,如括号内的子表达式或分隔多个子表达式的交替|运算符中),则它没有特殊意义,只匹配*字符。 模式= "(*.mxf)“ 因此,是一个正则表达式,该表达式具有一个括号大小的子表达式,该表达式与文字字符串*.mxf匹配。您可以使用.*而不是*来匹配任意数量的非换行符,或者使用[^/]*来匹配任意数量的非路径分隔符。
  2. re.match(pattern, '\')是非法的( \转义下面的',因此您将得到一个未终止的字符串)。
  3. 即使您将其修复为re.match(patterh, '\\'),每次也将您的模式与固定的字符串\进行匹配。我想你真正想要的是 如果re.match(模式,s)在rasp中匹配s=s 为了返回rasp中与pattern中的正则表达式匹配的每个项的列表。

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

代码语言:javascript
复制
import fnmatch
import os.path
pattern = "*.mxf"
matching = [os.path.basename(s) for s in rasp if fnmatch.fnmatch(s, pattern)]
print matching
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39636874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档