繁体   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