---
# System prepended metadata

title: 「グループ定義の均等化」を使用して、メソッドの中身を取得する正規表現 C# 2021-11-28
tags: [C#, グループ定義の均等化, 正規表現]

---

---
lang: ja-jp
breaks: true
---
# 「グループ定義の均等化」を使用して、メソッドの中身を取得する正規表現 C# 2021-11-28

```csharp=
public const string Tag_Header = "Header";
public const string Tag_Method = "Method";

private static Regex GetRegMethodContent(
    string strMethodName
    )
{
    // メソッド の中身を抽出。
    // ※「グループ定義の均等化」を利用。
    string pattern = @"(?<" + Tag_Header + @">\s+" + strMethodName + @"\s*\([^\{\}]+)(?<" + Tag_Method + @">\{(?:[^\{\}]*(?:(?:(?'Open'\{)[^\{\}]*)+(?:(?'Close-Open'\})(?:[^\{\}])*)+)*(?(Open)(?!)))\})";
    var reg = new Regex(
        pattern, 
        RegexOptions.Singleline | RegexOptions.Compiled
        );
    return reg;
}
```

```=
(?<Tag_Header>\s+MethodName\s*\([^\{\}]+)(?<Tag_Method>\{(?:[^\{\}]*(?:(?:(?'Open'\{)[^\{\}]*)+(?:(?'Close-Open'\})(?:[^\{\}])*)+)*(?(Open)(?!)))\})
```

## メソッドの中身の一部を置換する正規表現

```=
(?<Tag_Header>\s+MethodName\s*\([^\{\}]+)(?<Tag_Method>(?<Tag_ContentHead>\{(?:[^\{\}]*(?:(?:(?'Open'\{)[^\{\}]*)+(?:(?'Close-Open'\})(?:[^\{\}])*)+)*(?(Open)(?!)))[^\{\}]*)(?<Tag_Target>xxxxxxxx)(?<Tag_ContentTail>[^\{\}]*\}))
```

```=
${Tag_Header}${Tag_ContentHead}${Tag_Target}${Tag_ContentTail}
```

###### tags: `正規表現` `グループ定義の均等化` `C#`
