【问题标题】: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,
}

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

【问题讨论】:

    标签: c# regex comments


    【解决方案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,我打算使用正则表达式尝试查找/替换并替换为空字符串。
    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2011-10-29
    • 2010-11-14
    • 2015-03-04
    • 2017-05-22
    • 2013-04-20
    • 1970-01-01
    相关资源
    最近更新 更多