Это продолжение до another question. Решение, которое я нашел, отлично поработало для каждого из тестовых случаев, которые я бросил на него, пока не появился случай, который ускользал от меня в первый раз.Регулярное замещение HTML-тега не совсем корректно
Моя цель - переформатировать неправильно отформатированные атрибуты тегов с помощью регулярных выражений (я знаю, вероятно, не проверенный дураком метод, как я выяснил, но неся со мной).
Мои функции:
Public Function ConvertMarkupAttributeQuoteType(ByVal html As String) As String
Dim findTags As String = "</?\w+((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>"
Return Regex.Replace(html, findTags, AddressOf EvaluateTag)
End Function
Private Function EvaluateTag(ByVal match As Match) As String
Dim attributes As String = "\s*=\s*(?:(['""])(?<g1>(?:(?!\1).)*)\1|(?<g1>\S+))"
Return Regex.Replace(match.Value, attributes, "='$2'")
End Function
Регулярное выражение в функции EvaluateTag
будет правильно преобразовать HTML, как
<table border=2 cellpadding='2' cellspacing="1">
в
<table border='2' cellpadding='2' cellspacing='1'>
Вы заметите, что я принуждая значения атрибутов быть окруженным одинарными кавычками - не беспокойтесь об этом. Случай, когда он ломается, - это то, что значение атрибута последнего не имеет ничего вокруг.
<table width=100 border=0>
выходит из регулярных выражений замените
<table width='100' border='0>'
с последними одинарными кавычками неправильно вне тега. Я уже признался, что я не очень хорошо разбираюсь в регулярном выражении; Я просто не нашел времени, чтобы понять все, что он может сделать. Итак, я прошу некоторую помощь в настройке регулярного выражения EvaluateTag
, чтобы он мог справиться с этим окончательным случаем.
Спасибо!
Я думаю, вам будет намного лучше использовать инструмент для очистки HTML (как было предложено da8 по вашему другому вопросу) или разбор HTML с помощью прощающего DOM и его реэкспортирования. – TrueWill
Возможный дубликат [Можете ли вы привести несколько примеров того, почему трудно анализировать XML и HTML с помощью регулярного выражения?] (Http: // stackoverflow.com/questions/701166/can-you-обеспечить-some-examples-of-why-it-is-hard-to-parse-xml-and-html-with-a-rege) –
Возможный дубликат [RegEx match open теги, кроме XHTML автономных тегов] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –