1

我有一个 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; }

实现这一目标的正则表达式是什么?

4

2 回答 2

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 回答
2

使用 Visual Studio 查找和替换

使用 Visual Studio 的 Find & Replace,您可以使用以下表达式:

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

而这个替换:

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

分解它:

  • ^.*\<summary\>\n- 匹配一行的开头,任意数量的字符 uptil 后跟一个新行。
  • {:b*}///捕获任何空格直到 /// 字符。稍后我们将使用这个捕获的空格,以便我们可以正确缩进属性。
  • :b*{.*}匹配任何空格,然后将其余部分捕获为我们想要的内容。
  • \n.*\<\/summary\>$在新行上匹配,然后直到结束摘要元素的行尾。

对于替换,\1是我们捕获的空格,因此属性缩进到相同的位置,并且\2是摘要内容。

于 2012-05-02T20:17:00.663 回答