[英]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.