1) ЗАМЕНИТЕ только несколько тегов html соответствующими тегами html.

Пример: замените тег h1 тегами h4 и замените тег div тегом p.

Вход:

<div><h1>First</h1><h1 align='center'>Second</h1></div><span>third</span>

Ожидаемый результат:

<p><h4>First</h4><h4 align='center'>Second</h4></p><span>third</span>

2) УДАЛИТЕ только несколько тегов HTML.

Пример: удалить теги div и h1.

Вход:

<div><h4>First</h4><h1 align='center'>Second</h1></div>

Ожидаемый результат:

<h4>First</h4>Second

К сведению: я пробовал использовать

Regex.Replace(html, @"</?h1>", "")

Но он не удаляется, если у тега есть атрибуты.

1
user2692805 3 Окт 2014 в 05:58
1
Разбор html с помощью регулярных выражений... что может пойти не так.
 – 
sa_ddam213
3 Окт 2014 в 06:01
Хотя принятый ответ решает вашу непосредственную проблему, ваш вопрос, поскольку он задан, шире и вписывается в дубликат стандартного «анализа HTML с помощью регулярных выражений». Пожалуйста, не забудьте прочитать ответы после первых нескольких раз, которые содержат множество деталей, почему это сложно, какие особенности фреймворка регулярных выражений вы можете использовать и, что более важно, какие рекомендуемые альтернативы (например, для C # HtmlAgilityPack является обычным и простым в использовании решение, если ваш HTML не исходит из одного хорошо исправленного источника).
 – 
Alexei Levenkov
3 Окт 2014 в 06:58

2 ответа

Лучший ответ

Вы можете использовать группы захвата в своем регулярном выражении и использовать их для замены в соответствии с документацией здесь: http : //msdn.microsoft.com/en-us/library/e7f5w83z

//to remove all h1 tags:
Regex.Replace(html, @"</?h1[^>]*>", "")

//to replace all div tags with p, keeping the same attributes:
Regex.Replace(html, @"(</?)div([^>]*>)", "$1p$2")

//to change the attributes of the div tags you will need two regexes:
//one for the opening tags
Regex.Replace(html, @"<div[^>]*>", "<p class='content'>")
//one for the closing tag
Regex.Replace(html, @"</div>", "</p>")

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

1
Daniel Ribeiro Moreira 3 Окт 2014 в 06:49
Спасибо, ДАНИЭЛЬ 1) Можете ли вы добавить регулярное выражение для замены тега, исключая атрибуты, а также новый тег с атрибутами. Пример замены
на

.
 – 
user2692805
3 Окт 2014 в 06:37

Вы пробовали регулярное выражение </?(h1|div)[^>]*>? (Или, если вы хотите удалить только теги h1, </?h1[^>]*>?)

0
Janaka Bandara 3 Окт 2014 в 06:05