1

我正在尝试在 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 不是一个选择。

我还有什么其他方法可以做到这一点?提前致谢。

4

2 回答 2

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(..*) ", ".")
于 2012-10-24T03:41:37.833 回答
0

你可以使用prcegrep,看到这个问题。为此,您需要将正则表达式调整为多行。

您还可以使用以下方法构建一些东西:

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

这个问题有一个例子。

于 2012-10-24T03:40:34.030 回答