Skip to main content
 首页 » 编程设计

c#之用 C# 属性替换 XML 注释的正则表达式

2024年02月20日30findumars

我有一个 XML 模式,我正在尝试使用它来创建 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 ,并编写额外的代码来反射(reflect)它们。


所以这是我的问题。我想使用 Visual Studio 查找和替换对 XSD2Code 生成的代码进行正则表达式样式的替换,以便生成的代码如下所示:

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

实现此目的的正则表达式是什么?

请您参考如下方法:

using Visual Studio Find and Replace

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

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

这个替换:

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

分解:

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

对于替换,\1是我们捕获的空格,所以属性缩进到同一个地方,\2是摘要内容。