Regex - удалить последний <p>сегмент строки HTML - PullRequest
0 голосов
/ 03 сентября 2011

У меня есть структура HTML, которая извлекается из канала RSS, и мне нужно удалить ее часть, но она не является отдельной частью потока.

Итак, у меня есть

<p>Some Html... </p>
<br />
<p>The p section I want to remove</p>

Есть ли шаблон регулярных выражений, который может это сделать?найти последний <p> сегмент данной строки и вырезать его?Я использую C # для регулярных выражений.

Ответы [ 2 ]

5 голосов
/ 03 сентября 2011

Вы уверены, что хотите использовать Regex для этого?На самом деле я думаю, что вы должны использовать их только тогда, когда вам нужно.

Почему бы вам не рассмотреть что-то вроде (при условии, что HTML правильно сформирован и что нет вложенных абзацев):

string html = GetRSS();
int pStartIndex = html.LastIndexOf("<p>");
int pEndIndex = html.LastIndexOf("</p>");
string result = html.Remove(pStartIndex, pEndIndex - pStartIndex + 4);

В качестве альтернативы вы могли бы рассмотреть возможность использования чего-то более продвинутого (и, возможно, уместного), такого как HTML Agility Pack или (что еще хуже, если вы работаете с плохо сформированным html) встроенным парсером XML .NET ( РЕДАКТИРОВАТЬ: Как говорит svicks, если вы выберете это решение, убедитесь, что вы работаете с HTML, который также является допустимым XML ).

0 голосов
/ 03 сентября 2011

Вы можете использовать это регулярное выражение для замены последнего вхождения тега <p>.

// Begin with '<p>' followed by any character and then end with '</p>'
var pattern = @"<p>.*</p>"; 
var regex = new Regex(pattern);

var sourceString = @"<p>Some Html... </p>\n<br />\n<p>The p section I want to remove</p>";

var matchCollection = regex.Matches(sourceString);
if(matchCollection.Count > 0)
{
    sourceString.Replace(matchCollection[matchCollection.Count - 1].Value, string.Empty);
}
...