我有一个XML Schema,我正在尝试用它来创建C#类。目前,我正在与XSD2Code合作创建课程。 original schemas的元素看起来像这样:
<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注释指的是映射到different data representation的TMATS代码。我需要以某种运行时可读的表示形式捕获这些代码,以便我可以以编程方式执行此映射。到目前为止,我最好的想法是将这些XML注释翻译为C# Attributes,并编写其他代码以反映它们。
所以这是我的问题。我想使用Visual Studio查找和替换对XSD2Code生成的代码进行正则表达式替换,以便生成的代码如下所示:
[TmatsCode(@"ALT\N")]
public string NumberOfTags { get; set; }
实现这一目标的正则表达式是什么?
答案 0 :(得分: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));
答案 1 :(得分:2)
使用Visual Studio查找和替换
使用Visual Studio的Find&amp;替换,你可以使用这个表达式:
^.*\<summary\>\n{:b*}///:b*{.*}\n.*\<\/summary\>$
这个替代品:
\1[TmatsCode(@"\2")]
要打破它:
^.*\<summary\>\n
- 在一行的开头匹配,任意数量的字符后跟一个新行。{:b*}///
捕获任何空格直到///字符。我们稍后将使用此捕获的空格,以便我们可以正确缩进属性。:b*{.*}
匹配任何空格,然后将余数捕获为我们想要的内容。\n.*\<\/summary\>$
匹配新行,然后到结束摘要元素行的末尾。对于替换,\1
是我们捕获的空格,因此属性缩进到同一位置,\2
是摘要内容。