[英]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.