Есть ли синтаксис сопоставления двойных кавычек регулярного выражения, который можно использовать без изменений в C#? - PullRequest
0 голосов
/ 09 мая 2020

Следующее простое регулярное выражение включает четыре двойные кавычки, которые необходимо сопоставить. Я не пытаюсь найти решение для этого конкретного регулярного выражения, а просто использую его в качестве общего примера:

\s*"Hello"\s*"world"\s*

Проблема, с которой я всегда сталкивался при написании кода C#, содержащего регулярные выражения. которые должны соответствовать двойным кавычкам, - это громоздкий синтаксис, который мне пришлось использовать, потому что строковые литералы в C# разделены двойными кавычками. Я использовал две разные техники ниже, ни одна из которых мне не нравится. Помимо дополнительной сложности, необходимой для преобразования исходного регулярного выражения в приемлемый синтаксис C#, преобразование этого синтаксиса обратно в исходное регулярное выражение для дополнительной разработки является настоящей проблемой. Есть ли какая-либо форма, которая была бы одинаково приемлема как для механизма регулярных выражений, так и для языкового парсера C#?

Первый способ использует escape-символы, чтобы избежать обратной косой черты и двойных кавычек, которые должны присутствовать буквально в регулярном выражении. Я считаю, что это наиболее подверженный ошибкам подход, потому что для более сложных регулярных выражений вы попадаете в ловушку обратной косой черты:

"\\s*\"Hello\"\\s*\"world\"\\s*"

Второй способ разбивает исходное регулярное выражение на несколько частей и объединяет их. Частям, которые являются строковыми литералами и содержат обратную косую черту регулярного выражения, предшествует символ @, чтобы обратная косая черта воспринималась буквально, а не как escape-символы. Я считаю это более подробным, но менее подверженным ошибкам, чем предыдущий подход:

@"\s*" + '"' + "Hello" + '"' + @"\s*" + '"' + "world" + '"' + @"\s*"

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Я обнаружил, что при использовании шестнадцатеричной escape-последовательности \ x22 для представления двойной кавычки одна и та же строка регулярного выражения может использоваться без изменений как в моем приложении для разработки регулярных выражений (RegexBuddy), так и в строковом литерале C#. То есть в моем приложении для разработки

\s*"Hello"\s*"world"\s*

может быть представлено напрямую как

\s*\x22Hello\x22\s*\x22world\x22\s*

, а в строковом литерале C# та же строка регулярного выражения может быть представлена ​​как

@"\s*\x22Hello\x22\s*\x22world\x22\s*"

Строка все еще загромождена, но, по крайней мере, никаких изменений не требуется.

0 голосов
/ 09 мая 2020

@"\s*""Hello""\s*""world""\s*" дает строку \s*"Hello"\s*"world"\s*. Просто удвойте двойные кавычки в строке с добавлением @ (буквальная строка AKA), чтобы отобразить двойные кавычки

Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...