Возможно, вы много спрашиваете о парсере, так как это, вероятно, редкий случай. Возможно, вам придется решить эту проблему самостоятельно.
Основная проблема, которую я вижу, состоит в том, что в значении атрибута есть наборы двойных кавычек. Гарантируется ли, что в разметке всегда будет соответствующий закрывающий символ для каждого открытия? Другими словами, для каждого <</strong> будет > и для каждого открытия " или ' соответствующая отметка закрытия?
Если это так, я бы предложил взять исходный текст для HTML-парсера, такого как Html Agility Pack, и добавить некоторые функции для разбора атрибутов. Использовать стек; для каждого открывающего символа нажимайте его, затем читайте, пока не найдете другой открывающий или закрывающий символ. Если он открывается, нажмите на него, если он закрывается, нажмите его.
Кроме того, вы можете добавить обнаружение для символов меньше и больше чем в значении атрибута и не распознавать конец значения атрибута, пока все содержащиеся в нем теги не будут закрыты.
Еще одно возможное решение заключается в изменении исходной разметки перед ее передачей в анализатор и заменой недопустимых символов в значениях атрибута на экранированные символы (амперсанд-точка с запятой). К сожалению, это потребует некоторого предварительного разбора с вашей стороны.