正则表达式将 XML 注释替换为 C# 属性
本文关键字:属性 替换 注释 XML 正则表达式 | 更新日期: 2023-09-27 18:33:10
我有一个XML模式,我正在尝试使用它来创建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 代码。 我需要以某种运行时可读的表示形式捕获这些代码,以便能够以编程方式执行此映射。 到目前为止,实现此目的的最佳主意是将这些 XML 注释转换为 C# 属性,并编写其他代码来反映它们。
所以这是我的问题。 我想使用 Visual Studio Find and Replace 对 XSD2Code 生成的代码进行正则表达式样式替换,以便生成的代码如下所示:
[TmatsCode(@"ALT'N")]
public string NumberOfTags { get; set; }
实现这一目标的正则表达式是什么?
使用 Visual Studio 查找和替换
使用 Visual Studio 的 Find & Replace,您可以使用以下表达式:
^.*'<summary'>'n{:b*}///:b*{.*}'n.*'<'/summary'>$
而这个替换:
'1[TmatsCode(@"'2")]
分解一下:
-
^.*'<summary'>'n
- 在一行的开头匹配,任意数量的字符,直到后跟新行。 -
{:b*}///
捕获任何空格,直到///字符。稍后我们将使用此捕获的空格,以便正确缩进属性。 -
:b*{.*}
匹配任何空格,然后将其余部分捕获为我们想要的内容。 -
'n.*'<'/summary'>$
新行上的匹配项,然后直到结束摘要元素的行尾。
对于替换,'1
是我们捕获的空格,因此属性缩进到同一位置,'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));