【问题标题】:Regex to replace XML comment with a C# Attribute正则表达式用 C# 属性替换 XML 注释
【发布时间】:2012-05-12 08:09:27
【问题描述】:

我有一个 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 cmets 转换为 C# Attributes,并编写额外的代码来反映它们。


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

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

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

【问题讨论】:

    标签: c# regex visual-studio-2008 .net-3.5 xsd


    【解决方案1】:

    使用 Visual Studio 查找和替换

    使用 Visual Studio 的 Find & Replace,你可以使用这个表达式:

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

    还有这个替换:

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

    分解:

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

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

    【讨论】:

    • 太好了,谢谢!这些天之一,我要学习正则表达式。它在我的待办事项清单上,还有大约一千件其他事情要学习。 ://
    【解决方案2】:
    (?<=/// \<summary\>\r\n/// )[^\r\n]+(?=\r\n/// \<\/summary\>)
    

    将匹配

    ALT\N
    

    在你的例子中。

    编辑:

    VS 查找和替换?没注意到……上面是.net 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));
    

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多