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

正则表达式匹配注释(单行或多行)并匹配其他所有内容(C#),c#,regex,parsing,C#,Regex,Parsing,我正在与C#合作,我想匹配单行注释或多行注释或所有内容。 例如,下面的文本: /* this is a multiple-line comment */ this = "is code"; // this is a single-line comment 现在我正在使用这个正则表达式/{2}(?.*?$\/\*(?.*?\*/ 匹配模式为单行|多行 这有利于匹配注释,但与常规代码不匹配 我试过这个: /{2}(?.*?$\124;/\*(?.*?\*/\*(?*) 要匹配代码,但它似乎会

我正在与C#合作,我想匹配单行注释或多行注释或所有内容。 例如,下面的文本:

/* 
this
is a multiple-line
comment */

this = "is code";

// this is a single-line comment
现在我正在使用这个正则表达式
/{2}(?.*?$\/\*(?.*?\*/

匹配模式为单行|多行

这有利于匹配注释,但与常规代码不匹配

我试过这个:

/{2}(?.*?$\124;/\*(?.*?\*/\*(?
*)


要匹配代码,但它似乎会干扰其他捕获(我认为只有在其他捕获组都不工作的情况下,它才会捕获代码)。

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

要在C#中使用此选项,请执行以下操作:

我不太确定你说的“匹配所有其他内容”是什么意思,因为这并不是RegEx的真正目的——你也可以把整个文本都看完。 您可以(也可能应该)做的是匹配代码中的注释,然后在涉及代码其余部分时忽略匹配项

如果您对匹配代码构造感兴趣,那么必须为每个构造创建一个正则表达式。 这里有一个用于if/else的选项:
(if)|(else)
-然后您可以使用匹配项来执行任何您想要的操作。 这将匹配字符串(双引号):
([“][^”]+[“])


也许我误解了你的问题,但是如果你只是想拆分评论,那么就获取匹配项,忽略其余的-或者反转匹配项。

这对你来说已经足够好了,只需拆分评论正则表达式广告,你就可以得到其余的。我确实理解你的意思;)但我希望他们留在相应的组中…并拆分doe无法维护组名,或者有办法吗?使用正确的工具解析代码,使用专用的C代码解析器。使用正则表达式不安全,在边缘情况下肯定会失败。@WiktorStribiżew等xDGameStudios说:
string url=”http://example.com“
@WiktorStribiżew但我不想解析C#我想解析一堆使用“自定义”语言(不是我创建的)的文件…”。。。我不必检查错误,也不必编译它,也不必运行它。。。我只需要做一些编辑,例如删除所有评论。。。或者删除所有宏定义,或者在删除宏定义后,如果文本为空,则忽略文件all-together.Nope。不知道你的意思。它对该字符串失败。测试:regexr.com/4pphs。很好用。
int Foo(string haystack) {
    var regex = new Regex(@"((\/[*])([\s\S]+)([*]\/))|([/]{2,}[^\n]+)", RegexOptions.Compiled);

    var matches = regex.Match(haystack);

    return matches.Count; 
}