正则表达式匹配注释(单行或多行),并匹配其他所有内容(C#)

时间:2019-11-28 16:41:32

标签: c# regex parsing

我正在使用C#,并且想匹配单行注释多行注释或其他 。 例如下面的文本:

/* 
this
is a multiple-line
comment */

this = "is code";

// this is a single-line comment

现在我正在使用此正则表达式/{2}(?<single>.*?)$|/\*(?<multiple>.*?)\*/

匹配模式为单行 | 多行

这对匹配注释很好,但与常规代码不匹配。

我尝试过:

/{2}(?<single>.*?)$|/\*(?<multiple>.*?)\*/|(?<code>.*)

匹配代码,但似乎与其他捕获混乱(我虽然只有在其他捕获组都不工作的情况下才捕获代码,但我还是会捕获)。

1 个答案:

答案 0 :(得分:0)

这是一个简单的正则表达式,它将同时匹配多行和单行注释(C样式):((\/[*])([\s\S]+)([*]\/))|([/]{2,}[^\n]+)

要在C#中使用它:

int Foo(string haystack) {
    var regex = new Regex(@"((\/[*])([\s\S]+)([*]\/))|([/]{2,}[^\n]+)", RegexOptions.Compiled);

    var matches = regex.Match(haystack);

    return matches.Count; 
}

我不太确定您所说的“匹配其他所有内容”是什么意思,因为这并不是RegEx真正的目的-您也可以将整个文本全部取下来。 您可以(可能应该)做的是在代码中匹配注释,然后在其余代码中忽略匹配。

如果您对匹配代码结构感兴趣,则必须为每个代码创建一个正则表达式。 这是if / else的一项:(if)|(else)-然后,您可以使用匹配项来完成您打算做的事情。 这将匹配字符串(双引号):(["][^"]+["])

也许我误解了您的问题,但是如果您只想拆分注释,请获取匹配项,而忽略其余部分-或反转匹配项。