1

C# クラスを作成しようとしている XML スキーマがあります。現在、XSD2Codeを使用してクラスを作成しています。元のスキーマには、次のような要素があります。

<xs:element name="NumberOfTags" type="xs:positiveInteger" minOccurs="0">
    <xs:annotation>
        <xs:documentation>ALT\N</xs:documentation>
    </xs:annotation>
</xs:element>

XSD2Code は、次のようなコードを生成します。

/// <summary>
/// ALT\N
/// </summary>
public string NumberOfTags { get; set; }

XML コメントは、別のデータ表現にマップされる TMATS CODE を参照します。このマッピングをプログラムで実行できるように、これらのコードを何らかの実行時に読み取り可能な表現でキャプチャする必要があります。これを達成するための私の最良のアイデアは、これらの XML コメントをC# Attributesに変換し、それらを反映する追加のコードを記述することです。


だからここに私の質問があります。結果のコードが次のようになるように、Visual Studio の検索と置換を使用して、XSD2Code によって生成されたコードで正規表現スタイルの置換を行いたいと考えています。

[TmatsCode(@"ALT\N")]
public string NumberOfTags { get; set; }

これを達成する正規表現は何ですか?

4

2 に答える 2

2

Visual Studio の検索と置換の使用

Visual Studio の検索と置換を使用すると、次の式を使用できます。

^.*\<summary\>\n{:b*}///:b*{.*}\n.*\<\/summary\>$

そして、この交換:

\1[TmatsCode(@"\2")]

それを分解するには:

  • ^.*\<summary\>\n- 行の先頭、任意の数の文字まで一致し、その後に改行が続きます。
  • {:b*}////// 文字までの空白をキャプチャします。このキャプチャされた空白を後で使用して、属性を正​​しくインデントできるようにします。
  • :b*{.*}任意の空白に一致し、残りを必要なコンテンツとしてキャプチャします。
  • \n.*\<\/summary\>$新しい行で一致し、終了要約要素の行の終わりまで。

置換の場合、\1はキャプチャした空白なので、属性は同じ場所にインデントされ、\2は要約コンテンツです。

于 2012-05-02T20:17:00.663 に答える
2
(?<=/// \<summary\>\r\n/// )[^\r\n]+(?=\r\n/// \<\/summary\>)

一致します

ALT\N

あなたの例では。

編集:

VS検索と置換? 気づきませんでした...上記は.net Regexです。

ただし、この方向に進み、コメントへの回答として... Regex を少し書き直してコメント全体に一致させ、グループ内の内部値をキャプチャすることにより、Regex.Replace の MatchEvaluator オーバーロードがここで独自のものになります。

Regex.Replace(
 str,
 @"/// \<summary\>\r\n/// (?<tag>[^\r\n]+)\r\n/// \<\/summary\>",
 m => string.Format(
       "[TmatsCode(@\"{0}\"]",
       m.Groups["tag"].Value));
于 2012-05-02T20:06:16.763 に答える