Я представляю себе функцию, которая, как я полагаю, будет использовать Regex, и для таких экземпляров, как <p><strong></strong></p>
, было бы рекурсивно удалять все пустые теги HTML в строке. Это должно было бы учитывать пробелы, если это возможно. Не было бы сумасшедших случаев, когда символ ‹ использовался в значении атрибута.
Я довольно ужасен в регулярных выражениях, но я думаю, что это возможно. Как вы можете это сделать?
Вот метод, который у меня есть до сих пор:
Public Shared Function stripEmptyHtmlTags(ByVal html As String) As String
Dim newHtml As String = Regex.Replace(html, "/(<.+?>\s*</.+?>)/Usi", "")
If html <> newHtml Then
newHtml = stripEmptyHtmlTags(newHtml)
End If
Return newHtml
End Function
Однако мое текущее регулярное выражение находится в формате PHP и, похоже, не работает. Я не знаком с синтаксисом регулярных выражений .NET.
Всем, кто говорит, что не используйте регулярное выражение: мне любопытно, каким будет шаблон в любом случае. Наверняка существует шаблон, который мог бы сопоставить все открывающие/закрывающие начальные теги с любым количеством пробелов (или без пробелов) между тегами? Я видел регулярное выражение, которое соответствует тегам HTML с любым количеством атрибутов, одному пустому тегу (например, просто <p></p>
) и т. д.
До сих пор я пробовал следующие шаблоны регулярных выражений в приведенном выше методе безрезультатно (например, у меня есть текстовая строка с пустыми тегами абзацев, которые даже не были удалены).
Regex.Replace(html, "/(<.+?>\s*</.+?>)/Usi", "")
Regex.Replace(html, "(<.+?>\s*</.+?>)", "")
Regex.Replace(html, "%<(\w+)\b[^>]*>\s*</\1\s*>%", "")
Regex.Replace(html, "<\w+\s*>\s*</\1\s*>", "")
To all those saying don't use regex
Я не буду раздавать свои лучшие регулярные выражения htlm/xhtml/xml/sgml бесплатно. Это коммерческая тайна (?DEFINE) - person   schedule 07.04.2011"/regex/i"
плохо."regex"
хорошо. Я обновил свой ответ фрагментами VB, которые должны вам подойти. - person ridgerunner   schedule 07.04.2011%
, как показано в моем ответе. - person ridgerunner   schedule 07.04.2011