正则表达式在 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# 源文件中查找注释的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在代码中查找空注释

用于查找 C# 类和方法名称的正则表达式

正则表达式大全(持续更新)|| 正则查找中文 || 正则查找注释

Python 3 正则表达式查找多行注释

正则表达式从 C# 中删除行注释

javascript 正则表达式在代码中查找注释