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

grep を呼び出す代わりに、 osreの組み合わせを使用して純粋な Python でこの機能を実装できます。複数行の一致を許可するには、 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 に答える