Regex to match specific comments in code

2019-08-23 09:11发布

问题:

Are there any regex experts who can help me clean up the following source code? I'm going through some existing code and I see several instances similar to the following:

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,
}

Unless someone can tell me that the comments for 1-3 are necessary, I'd like to do a find/replace (remove) on all of the comments that don't add any value to the code. From browsing the code I think it's safe to assume that any line that resembles "/// word = number," can be replaced. Cleaned up, I think it should look like:

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,
}

Your help is greatly appreciated! And by helping me, you are really helping yourself. Because who knows, someday you might be maintaining this very code!

回答1:

With VS2008 FindAndReplace I tried this and worked;

Find what:

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

Replace with:

(empty)

Use:

Regular expressions



回答2:

Here is a perl script which will remove such comments:

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


回答3:

Are you working on a unix-like os or have cygwin?

I've never done multiline matching with regex, but there's a link on using sed to do it...

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

I'll read and edit this answer later to apply it to your problem. Or maybe someone else will.