簡體   English   中英

正則表達式用C#屬性替換XML注釋

[英]Regex to replace XML comment with a C# Attribute

我有一個XML Schema,我正在嘗試用它創建C#類。 目前,我正在使用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#屬性 ,並編寫其他代碼以反映它們。


所以這是我的問題。 我想使用Visual Studio查找和替換對XSD2Code生成的代碼進行正則表達式替換,以便生成的代碼如下所示:

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

實現這一目標的正則表達式是什么?

(?<=/// \<summary\>\r\n/// )[^\r\n]+(?=\r\n/// \<\/summary\>)

會匹配

ALT\N

在你的例子中。

編輯:

VS找到並替換? 沒注意到......以上是.net正則表達式。

但是,繼續朝着這個方向並回答你的評論...通過重寫正則表達式以匹配整個注釋並捕獲組中的內部值,Regex.Replace的MatchEvaluator重載在此處進入:

Regex.Replace(
 str,
 @"/// \<summary\>\r\n/// (?<tag>[^\r\n]+)\r\n/// \<\/summary\>",
 m => string.Format(
       "[TmatsCode(@\"{0}\"]",
       m.Groups["tag"].Value));

使用Visual Studio查找和替換

使用Visual Studio的查找和替換,您可以使用此表達式:

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

這個替代品:

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

要打破它:

  • ^.*\\<summary\\>\\n - 在一行的開頭匹配,任意數量的字符uptil后跟一個新行。
  • {:b*}///捕獲任何空格直到///字符。 我們稍后將使用此捕獲的空格,以便我們可以正確縮進屬性。
  • :b*{.*}匹配任何空格,然后將余數捕獲為我們想要的內容。
  • \\n.*\\<\\/summary\\>$匹配新行,然后直到結束摘要元素的行尾。

對於替換, \\1是我們捕獲的空格,因此屬性縮進到相同的位置, \\2是摘要內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM