簡體   English   中英

正則表達式匹配注釋(單行或多行)並匹配其他所有內容(C#)

[英]Regex match comments (single-line or multiple-line) and match everything else (C#)

我正在使用 C#,我想匹配單行注釋或多行注釋或其他所有內容。 例如下面的文字:

/* 
this
is a multiple-line
comment */

this = "is code";

// this is a single-line comment

現在我正在使用這個正則表達式/{2}(?<single>.*?)$|/\*(?<multiple>.*?)\*/

匹配模式為單行| 多行.

這對於匹配注釋很有用,但它與一般代碼不匹配。

我試過這個:

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

匹配代碼,但它似乎與其他捕獲混淆(我雖然它只會在其他捕獲組都不起作用的情況下捕獲代碼)。

這是一個簡單的正則表達式,它將匹配多行和單行注釋(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) - 然后您可以使用匹配項來做任何您想做的事情。 這將匹配字符串(雙引號): (["][^"]+["])

也許我誤解了您的問題,但如果您只想拆分評論,請獲取您的匹配項並忽略其余部分 - 或反轉匹配項。

/* 多行注釋 */ 和 // 單個注釋的正則表達式

string clear = new Regex(@"((\/[*])([\s\S]+?)([*]\/))|([/]{2,}[^\n]+)").Replace(input, "");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM