Следующее простое регулярное выражение включает четыре двойные кавычки, которые необходимо сопоставить. Я не пытаюсь найти решение для этого конкретного регулярного выражения, а просто использую его в качестве общего примера:
\s*"Hello"\s*"world"\s*
Проблема, с которой я всегда сталкивался при написании кода C#, содержащего регулярные выражения. которые должны соответствовать двойным кавычкам, - это громоздкий синтаксис, который мне пришлось использовать, потому что строковые литералы в C# разделены двойными кавычками. Я использовал две разные техники ниже, ни одна из которых мне не нравится. Помимо дополнительной сложности, необходимой для преобразования исходного регулярного выражения в приемлемый синтаксис C#, преобразование этого синтаксиса обратно в исходное регулярное выражение для дополнительной разработки является настоящей проблемой. Есть ли какая-либо форма, которая была бы одинаково приемлема как для механизма регулярных выражений, так и для языкового парсера C#?
Первый способ использует escape-символы, чтобы избежать обратной косой черты и двойных кавычек, которые должны присутствовать буквально в регулярном выражении. Я считаю, что это наиболее подверженный ошибкам подход, потому что для более сложных регулярных выражений вы попадаете в ловушку обратной косой черты:
"\\s*\"Hello\"\\s*\"world\"\\s*"
Второй способ разбивает исходное регулярное выражение на несколько частей и объединяет их. Частям, которые являются строковыми литералами и содержат обратную косую черту регулярного выражения, предшествует символ @, чтобы обратная косая черта воспринималась буквально, а не как escape-символы. Я считаю это более подробным, но менее подверженным ошибкам, чем предыдущий подход:
@"\s*" + '"' + "Hello" + '"' + @"\s*" + '"' + "world" + '"' + @"\s*"