正则表达式在 C# 源文件中查找注释
Posted
技术标签:
【中文标题】正则表达式在 C# 源文件中查找注释【英文标题】:Regex to find comment in c# source file 【发布时间】:2011-07-19 17:13:04 【问题描述】:我的正则表达式无法匹配 c# 代码文件的标题。 如果存在,我基本上希望需要返回标题。
例子:
#define debug
//****************************************************************************************************
// <copyright file="" company="">
// Copyright (c) . All rights reserved.
// </copyright>
// <project>Engine</project>
//****************************************************************************************************
code here
//some other comment here
more code here
//another comment here
我的正则表达式如下所示:
(?:/\\*(?:[^*]|(?:\\*\+[^*/]))*\\*\+/)|(?://.*)
但它只匹配这一行: //**********************************************************
而不是评论的其余部分。
评论也可以这样结束"*/"
。
我的正则表达式有什么问题?为什么它没有抓住整个街区?
【问题讨论】:
你试过使用 RegexOptions.MultiLine 吗? 我正在使用 MultiLine,但它只返回 1 行,这是第一行。我正在用 C# 编写代码 【参考方案1】:试试这个 - 你可以拉出整个评论(使用“//”或其中的组来获取文本。这将为每一行返回一个匹配项。请使用“多行”选项运行这个:
^/[/|*](.+)$
【讨论】:
当然,不清楚提问者是评论的 // 或 /* 或 */ 部分还是“正文”。 这也有效,而且我不认为它会返回一个数组,而只是一个包含整个评论的块。 我想要整个评论,而不仅仅是正文:) 这确实会返回整个评论 - 一次一行。不要从组中抓取值,而是抓取整个匹配值。【参考方案2】:需要多行
(^\/\/.*?$|\/\*.*?\*\/)
【讨论】:
这行得通,实际上我自己的例子也行。我看到它返回并与结果一起排列,但我只是期待一个带有整个块的字符串:x 我的是一个通用的匹配 cmets。如果您只想匹配您的确切格式(注意它实际上是一堆 // 在一起),您可以尝试:(^//\*.*?$)+
(多行)。这将匹配单个块中以//*
为前缀的所有行。抱歉,我之前不清楚你想要什么。
现在,如果你只想要一个用星号括起来的块(仅在第一行和最后一行):(^//\*+?$(?:^//.*?$)^//\*+$)
【参考方案3】:
我猜你想提取伪 xml 代码,所以下面的表达式应该可以工作。请注意,您仍然必须删除每行中的前导“//”。
//\*+\n((?://.*\n)+)//\*+
【讨论】:
【参考方案4】:使用正则表达式模式:(/*([^]|[\r\n]|(*+([^/]|[\r\n])))*+/)|(//.)
查看更多https://code.msdn.microsoft.com/How-to-find-code-comments-9d1f7a29/
【讨论】:
以上是关于正则表达式在 C# 源文件中查找注释的主要内容,如果未能解决你的问题,请参考以下文章