正则表达式匹配代码中的特定注释

Posted

技术标签:

【中文标题】正则表达式匹配代码中的特定注释【英文标题】:Regex to match specific comments in code 【发布时间】:2010-12-11 01:14:05 【问题描述】:

是否有任何正则表达式专家可以帮助我清理以下源代码?我正在浏览一些现有代码,我看到了几个类似于以下内容的实例:

public enum Numbers

    /// <summary>
    /// One = 1, 
    /// </summary>
    One = 1,

    /// <summary>
    /// Two = 2, 
    /// </summary>
    Two = 2,

    /// <summary>
    /// Three = 3, 
    /// </summary>
    Three = 3,

    /// <summary>
    /// Four = 4 but don't use this because it will break everything, 
    /// </summary>
    Four = 4,

除非有人能告诉我 1-3 的 cmets 是必要的,否则我想对所有不会为代码添加任何价值的 cmets 执行查找/替换(删除)。通过浏览代码,我认为可以安全地假设任何类似于“/// word = number”的行都可以替换。清理一下,我觉得应该是这样的:

public enum Numbers

    One = 1,
    Two = 2,
    Three = 3,

    /// <summary>
    /// Four = 4 but don't use this because it will break everything, 
    /// </summary>
    Four = 4,

非常感谢您的帮助!通过帮助我,你真的是在帮助自己。因为谁知道呢,有一天你可能会维护这个代码!

【问题讨论】:

【参考方案1】:

使用 VS2008 FindAndReplace 我尝试了这个并且工作了;

查找内容:

/// \<summary\>.*\n.*\=:b:d[:b,]*\n.*\<\/summary\>\n

替换为:

(empty)

用途:

正则表达式

【讨论】:

谢谢,您为我节省了数千次不必要的击键和鼠标高亮显示!【参考方案2】:

这是一个 perl 脚本,它将删除此类 cmets:

my $text = join "", <>;
$text =~ s///\s+<summary>\s+///\s+\w+\s+=\s+\d+,\s+///\s+</summary>g;
print $text;

【讨论】:

\s已经包含\n,所以[\s\n]+可以写成\s+【参考方案3】:

您是在开发类似 unix 的操作系统还是使用 cygwin?

我从来没有用正则表达式进行多行匹配,但是有一个关于使用 sed 进行匹配的链接...

http://www.ilfilosofo.com/blog/2008/04/26/sed-multi-line-search-and-replace/

稍后我将阅读并编辑此答案以将其应用于您的问题。或者也许其他人会。

【讨论】:

实际上我正在使用 Visual Studio,我打算使用正则表达式尝试查找/替换并替换为空字符串。

以上是关于正则表达式匹配代码中的特定注释的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配代码块的注释

正则表达式到源代码注释

正则表达式匹配 PHP 注释

正则表达式匹配所有注释 //, /* */

用java正则表达式提取java程序中的注释

正则表达式,匹配特定字符后面的内容