У меня есть текстовый файл со смешанным NC-кодом и C# -Code. C# -Code начинается с «< #» и заканчивается на «#>». Теперь мне нужно одно выражение регулярных выражений, чтобы найти все NC-комментарии. Одна из проблем заключается в том, что NC-Комментарии начинаются с ";" поэтому у меня возникли некоторые проблемы, чтобы отличить NC-Comment от «;» C# -Code.Regex Match NC-Комментарии в строке со смешанным C# -кодом
Можно ли достичь этого только одним регулярным выражением?
; 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. Комментарий}
Я играл Arround со следующими регулярными выражениями:
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
Одним из решений может быть, чтобы подтолкнуть каждый «< #» в стек и поп каждый " #> "из этого стека. Поэтому, если стек пуст, тогда текущая строка - NC-Code. Затем я должен выяснить, является ли эта строка NC-Comment.
Зачем использовать сложное медленное регулярное выражение, когда вы можете делать то же самое проще и быстрее без регулярного выражения? –
Это не так просто. Что делать, если сам код C# содержит комментарий? Что, если у вас есть '<#' or '#>' в комментариях C#? –
И как бы вы достигли этого без регулярного выражения? – user1579585