【问题标题】:Regex to find comment in c# source file正则表达式在 C# 源文件中查找注释
【发布时间】: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# 编写代码

标签: c# regex comments


【解决方案1】:

试试这个 - 你可以拉出整个评论(使用“//”或其中的组来获取文本。这将为每一行返回一个匹配项。请使用“多行”选项运行这个:

^/[/|*](.+)$

【讨论】:

  • 当然,不清楚提问者是评论的 // 或 /* 或 */ 部分还是“正文”。
  • 这也有效,而且我不认为它会返回一个数组,而只是一个包含整个评论的块。
  • 我想要整个评论,而不仅仅是正文:)
  • 这确实会返回整个评论 - 一次一行。不要从组中抓取值,而是抓取整个匹配值。
【解决方案2】:

需要多行

(^\/\/.*?$|\/\*.*?\*\/)

【讨论】:

  • 这行得通,实际上我自己的例子也行。我看到它返回并与结果一起排列,但我只是期待一个带有整个块的字符串:x
  • 我的是一个通用的匹配 cmets。如果您只想匹配您的确切格式(注意它实际上是一堆 // 在一起),您可以尝试:(^//\*.*?$)+(多行)。这将匹配单个块中以//* 为前缀的所有行。抱歉,我之前不清楚你想要什么。
  • 现在,如果你只想要一个用星号括起来的块(仅在第一行和最后一行):(^//\*+?$(?:^//.*?$)^//\*+$)
【解决方案3】:

我猜你想提取伪 xml 代码,所以下面的表达式应该可以工作。请注意,您仍然必须删除每行中的前导“//”。

//\*+\n((?://.*\n)+)//\*+

【讨论】:

    【解决方案4】:

    使用正则表达式模式:(/*([^]|[\r\n]|(*+([^/]|[\r\n])))*+/)|(//.)

    查看更多https://code.msdn.microsoft.com/How-to-find-code-comments-9d1f7a29/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-27
      • 2013-08-14
      • 2016-07-15
      • 2013-07-02
      • 2013-04-16
      • 1970-01-01
      • 2011-01-20
      相关资源
      最近更新 更多