1

私は、ソースファイルから特定の構文を持つすべてのメソッドを取り除く必要があるPythonスクリプトを書いています。

ソースファイルに次のようなメソッドがあるとします。

fn difflml(args)[
       if [
            --blah 
           ]
       [ var ]
] -- END OF THE METHOD

--Othed method starts and stuffs

正規表現を使用して、これらのスタイルメソッドをソースファイルから削除できますか?

メソッド全体を削除するために、カウント[を維持する方法がわかりません。]私が考えていたのは、カウントをオンにして、カウントを0にしたとき[]、インクリメント[とデクリメントを繰り返して]印刷することでした。

私は正規表現にかなり慣れていないので、これが正規表現自体で実行できるかどうかはわかりません。

4

3 に答える 3

1

正規表現で行うことは可能だと思いますが、括弧を数えることはできません(これは正規表現エンジンではできないことです)。代わりに、消極的な量指定子を使用して、メソッド終了ブラケットの最初の出現に一致させることができます (それが常に行の最初/唯一の文字であるか、 -- END ...コメントが常に存在すると仮定します)。

しかし、私の意見では、正規表現はそのような目的には適切なツールではありません。なぜなら、長い複数行および複数の分岐コードでは、メモリと時間が非常に効率的でなくなる可能性があるからです。

代わりに単純なパーサーを作成することを検討してください。

于 2012-10-02T11:02:03.010 に答える
1

「-- END OF METHOD」などのコメントを削除するpyparsingを使用した簡単な例を次に示します。

from pyparsing import *

parser = nestedExpr('[', ']').setParseAction(keepOriginalText) + Group('--' + restOfLine).suppress()
print parser.transformString(text)

サンプルコードで生成します:

fn difflml(args)[
       if [
            --blah 
           ]
       [ var ]
]

--Othed method starts and stuffs
于 2012-10-02T12:24:18.850 に答える