4

私は30個のC#クラスファイルを持っていますが、それらはすべて同じ名前のメソッドを持っていますが、内部に同じコードはありません.C#ファイルを検索してメソッドの正規表現一致と内部のものを探してこれを変更したいと思います. これまでのところ、私の正規表現はメソッドの最初の行を見つけることができますが (これは簡単な部分です)、開始中括弧と終了中括弧を見つける方法がわかりません。間に不明な数の文字があります。

ここに私の試みがありますが、私は専門家ではありません

private void btnDelete_Click\(object sender, EventArgs e\)
\{
\S
\}

そして、これは私が見つける必要がある方法です

    private void btnDelete_Click(object sender, EventArgs e)
    {
        if (gridView1.RowCount <= 0) return;

        this.rowHandle = gridView1.FocusedRowHandle;
        currentState = state.delete;

        MessageResult res = new Global.sysMessages.sysMessagesClass().viewMessage(
            MessageType.Warning,
            "Delete Warning",
            "You are about to delete this record from the system forever.\nare you sure you want to continue?",
            ButtonTypes.YesNo,
            MessageDisplayType.Small);

        if (res == MessageResult.Yes)
        {
            delete(rowHandle);
            loadGrid();
        }
        currentState = state.idle;
    }

どんな助けでも大歓迎です、ありがとう

4

3 に答える 3

1

これを試して :)

\s*private\svoid\sbtnDelete_Click\(.*?\)\s*\{.+?\}(?!['"].*\}.*['"].*)

DOTALL を忘れないでください。つまり、.を含むすべてに一致します\n

間のすべて\{.+?\}がメソッドのコードです。

アップデート:

指摘したように、上記の正規表現は失敗するため、次の再帰関数を使用するとうまくいくと思われます。

{(?:[^{}]+|(?R))*}

また、文字列変数内にある場合は失敗し}ます。単純なジョブにパーサーを使用すると、やり過ぎになることがあるので調べています:)

于 2013-11-27T10:25:23.517 に答える
1

解決

private\s+void\s+btnDelete_Click\s*\(object\s+sender,\s*EventArgs\s+e\)\s*\{.+;\s+\}\s*

正規表現の視覚化

デモ

ここ

討論

中心的な問題は、最後の中括弧をどのように一致させるかです。btnDelete_Clickメソッドがクラスの最後に配置されていないと仮定します。そうでなければ、この正規表現は役に立ちません

この正規表現は、1 回限りの使用寿命を持つ迅速で汚れた作業に使用できます。

于 2013-11-27T10:11:50.260 に答える