Я публикую это как мой ответ, чтобы он отличался от других, читающих вопросы.
Как было отмечено в полезных комментариях к моему вопросу, ясно, что регулярное выражение не является хорошим инструментом для поиска строк в коде C #. Я мог бы написать простой «парсер» за то время, которое я провел, напоминая себе о синтаксисе регулярных выражений. - (Parser - чрезмерное утверждение, поскольку в комментариях и т. Д. Их нет), это мой исходный код, с которым я имею дело.)
Кажется, это хорошо подводит итог:
Некоторые люди, столкнувшись с проблемой, думают: «Я знаю, я буду использовать
регулярные выражения. »Теперь у них есть две проблемы.
Однако до тех пор, пока он не сломается в моем коде, я буду использовать регулярное выражение, опубликованное Blixt, но, если оно вызовет у меня проблемы, я не буду тратить время на сопоставление, пытаясь исправить его, прежде чем писать собственный анализатор. Например, строка C # это
@"@Q(?:[^Q]+|QQ)*Q|Q(?:[^Q\\]+|\\.)*Q".Replace('Q', '\"')
Обновление, у вышеупомянутого regEx возникла проблема, поэтому я просто написал свой собственный синтаксический анализатор, включая написание модульных тестов, для написания парсера потребовалось около 2 часов. Это гораздо меньше времени, чем я трачу, просто пытаясь найти (и протестировать) предварительно консервированный Regex в Интернете.
Проблема, с которой я столкнулся, заключается в том, что я стараюсь избегать Regex и просто пишу код обработки строк самостоятельно, а затем многие люди утверждают, что я трачу деньги клиента, не используя Regex. Однако всякий раз, когда я пытаюсь использовать Regex, то, что кажется простым шаблоном сопоставления, быстро становится сложнее. (Ни одна из онлайновых статей об использовании Regex в .net, которые я читал, не содержит хороших инструкций, которые бы давали понять, когда НЕ использовать Regex. Аналогично с документацией MSDN)
Давайте посмотрим, сможем ли мы помочь решить эту проблему, я только что создал вопросы о переполнении стека « Когда не следует использовать Regex »