Заменить двойные кавычки внутри атрибута double cots html

c# html html-agility-pack regex replace

Вопрос

У меня есть некоторые случаи, когда мои клиенты отправляют мне строку html с некоторыми атрибутами элементов, которые не так правильно структурированы. Как это:

<img src="../imgTest.jpg" alt="Something "quoted here, or here"">

Как я могу динамически изменить эти случаи на что-то вроде следующего?

<img src="../imgTest.jpg" alt="Something 'quoted here, or here'">

Мне нужно, чтобы этот html не отображался в браузере, а выполнял некоторые операции с ним.

Я использую HtmlAgilityPack для управления проблемами html, но для этих случаев он меняет мою строку html на это, и это не то, что я хочу:

<img src="../imgTest.jpg" alt="Something" quoted="" here,="" or="" here="">

Мой код с HtmlAgilityPack:

var htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml(myHtmlStr);

var htmlError = htmlDoc.ParseErrors.SafeAny();

if (!htmlError)
    myHtmlStr = htmlDoc.DocumentNode.InnerHtml;

Принятый ответ

Моя идея состоит в том, чтобы соответствовать " », если она находится внутри тега и не является атрибутом атрибута.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это решение может не работать в 100% случаях (ему потребуется адаптация, если в имена элементов / атрибутов добавлены пространства имен), но он должен работать, когда имя тега следует за < немедленно, двойные кавычки используются в качестве атрибутов значения атрибута , и не существует < символов внутри атрибутов.

использование

(?<=<\w+\b[^<]*)(?<!\w+=)"(?!\s*/?>|\s+\w+=")

и заменить ' .

См. Демо-версию regex .

Первый lookbehind гарантирует, что мы ищем двойную кавычку, указывающую на тег, вторая не соответствует совпадению, если есть слово, за которым следует знак равенства перед двойной кавычкой, а отрицательный lookahead не соответствует совпадению, если выполняется двойная кавычка с пробелами, за которыми следует скобка угла закрытия (вероятно, предшествующая косой чертой) или когда есть пробелы, сопровождаемые словом, сопровождаемым знаком равенства.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему