NC コードと C# コードが混在するテキストファイルがあります。C# コードは "<#" で始まり "#>" で終わります。ここで、すべての NC コメントを検索するために 1 つの正規表現が必要です。問題の 1 つは、NC コメントが「;」で始まることです。したがって、NC コメントを「;」で区別するためにいくつかの問題が発生しました。C#コードの。
たった1つの正規表現でこれを達成することは可能ですか?
; 1. NC-Comment
FUNCT_A;
FUNCT_B;
<# // C#-Code
int temp = 42;
string var = "hello"; // C#-Comment
#>
FUNCT_C ; 2. Comment
<# // C#-Code
for(int i = 0; i <10; i++)
{
Console.WriteLine(i.ToString());
}
#>
; 3. Comment
FUNCT_D;
正規表現の結果は {1. NC-コメント、2.コメント、3.コメント}
私は次の正規表現で遊んだ:
1.) (;(.*?)\r?\n) --> Finds all NC-Comments but also C#-Code as comment
2.) (#>.*?<#)|(#>.*) --> Finds all NC-Code except the first NC-Code fragment
3.) #>.+?(?=<#) --> Finds all NC-Code except the first and last NC-Code fragment
解決策の 1 つは、各 "<#" をスタックにプッシュし、このスタックから各 "#>" をポップすることです。したがって、スタックが空の場合、現在の文字列は NC コードです。次に、この文字列が NC コメントかどうかを確認する必要があります。