Я пытаюсь преобразовать все вхождения символа> в его эквивалент сущности HTML,>, в строке HTML, содержащей теги HTML. Дальнейшее, что мне удалось получить с помощью решения для этого, это использование регулярных выражений.
Вот что у меня есть:
public static readonly Regex HtmlAngleBracketNotPartOfTag = new Regex("(?:<[^>]*(?:>|$))(>)", RegexOptions.Compiled | RegexOptions.Singleline);
Основная проблема, с которой я сталкиваюсь, - это выделение одиночных> символов, которые не являются частью тега HTML. Я не хочу преобразовывать существующие теги, потому что мне нужно сохранить HTML для рендеринга. Если я не преобразую символы>, я получаю неверный HTML, что вызывает проблемы с отображением в браузере.
Это пример тестовой строки для разбора:
"Ok, now I've got the correct setting.<br/><br/>On 12/22/2008 3:45 PM, jproot@somedomain.com wrote:<br/><div class"quotedReply">> Ok, got it, hope the angle bracket quotes are there.<br/>><br/>> On 12/22/2008 3:45 PM, > sbartfast@somedomain.com wrote:<br/>>> Please someone, reply to this.<br/>>><br/>><br/></div>"
В приведенной выше строке ни один из символов>, являющихся частью тегов HTML, не следует преобразовывать в>. Итак, это:
<div class"quotedReply">>
должно стать таким:
<div class"quotedReply">>
Другая проблема заключается в том, что в приведенном выше выражении используется группа без захвата, что вполне допустимо, за исключением того факта, что совпадение относится к группе 1. Я не совсем уверен, как выполнить замену только в группе 1 и сохранить Остальная часть матча. Похоже, что MatchEvaluator на самом деле не работает, или, может быть, я просто не могу представить это прямо сейчас.
Я подозреваю, что мое регулярное выражение может быть связано с любовью.
У кого-нибудь есть яркие идеи?