搜索目录中的字符串

时间:2012-10-24 03:29:31

标签: python regex

我试图在Python中搜索目录中的给定字符串模式。然后我想将匹配组装成一个数组。

起初,我试图使用grep:

regex = " dojo.require(..*) "
bashCommand = "grep"+" --only-matching -r -h"+regex+baseDir
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
dirStr = process.communicate()[0]

但我意识到我需要在多行上支持字符串,例如

dojo.require(
"abc"(;

所以grep不是一个选项。

我可以通过其他方式实现这一目标吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用osre的组合在纯Python中实现此功能,而不是调用grep。使用re.DOTALL标志允许多行匹配。例如:

import re, os

def grep(regex, base_dir):
    compiled_regex = re.compile(regex, re.DOTALL)
    matches = list()
    for filename in os.listdir(base_dir):
        full_filename = os.path.join(base_dir, filename)
        if not os.path.isfile(full_filename):
            continue
        with open(os.path.join(base_dir, filename)) as fh:
            content = fh.read()
            if compiled_regex.search(content):
                matches.append(full_filename)
    return matches

print grep(" dojo.require(..*) ", ".")

答案 1 :(得分:0)

您可以使用prcegrep,请参阅this question。 要实现这一点,您需要将正则表达式调整为多行。

您还可以使用以下方式构建内容:

  • os.walk以递归方式访问所有文件。
  • re.search搜索正确的表达。

This question有一个例子。