Экранирование кавычек в регулярном выражении или сбор комментариев в коде - C#
Формулировка задачи:
Написать программу, которая удаляет все комментарии из исходного файла.
С помощью гугла и CyberForum.ru нашел метод сбора комментариев в файле с кодом С#. Осталась проблема как не учитывать места с кавычками. Как должно выглядеть регулярное выражение?
Или хотя бы подскажите как экранировать кавычки - ". Все методы типа: \, "" не работают. Пробовал указывать в юникоде вроде \u0022, все равно не получается учесть такие ситуации как:
Console.WriteLine("/*dfsdf*////****/**//**Hello, world!");/**/ //
Все ссылки уже фиолетовые.
Для примера input.txt
using System;
using System.IO;
using System.Text.RegularExpressions;
namespace HttpListenerTest
{
class Program
{
static void Main(string[] args)
{
string line;
StreamReader input = new StreamReader(@"../../input.txt");
StreamWriter output = new StreamWriter(@"../../output.txt");
line = input.ReadToEnd();
Regex pattern1 = new Regex(@"(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)");
line = pattern1.Replace(line, "");
Console.WriteLine(line);
output.WriteLine(line);
input.Close();
output.Close();
Console.ReadKey();
}
}
}Решение задачи: «Экранирование кавычек в регулярном выражении или сбор комментариев в коде»
textual
Листинг программы
using System;
using System.IO;
using System.Text.RegularExpressions;
namespace NoComments
{
class Program
{
static void Main()
{
string filePathIn = @"..\..\Input.txt";
string filePathOut = @"..\..\Output.txt";
if (File.Exists(filePathIn))
{
using (var streamReader = File.OpenText(filePathIn))
using (TextWriter textWriter = new StreamWriter(File.Create(filePathOut)))
{
string input = streamReader.ReadToEnd();
var blockComments = @"(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)";
var lineComments = @"//(.*?)\r?\n";
var strings = @"""((\\[^;\n]|[^"";\n])*)""";
var verbatimStrings = @"@(""[^""]*"")+";
Regex pattern = new Regex(blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings, RegexOptions.Compiled);
input = pattern.Replace(input, m =>
{
if (m.Value.StartsWith("/*")) return "";
if (m.Value.StartsWith("//")) return "\r\n";
return m.Value;
});
textWriter.WriteLine(input);
}
}
else
{
Console.WriteLine("File at path {0} is missing", filePathIn);
Console.Read();
}
}
}
}