Это не самое красивое решение вашей проблемы, но оно быстро сходит с ума.Регулярные выражения медленны по сравнению с прямыми строковыми методами.
Мой метод строк сравнивается с двумя регулярными выражениями Тима Пицкера.(Извините, Тим, я должен был выбрать кого-то, и у вас есть повышенный голос :))
это с 10 000 повторений.числа - число прошедших тиков:
регулярное выражение заменить: среднее значение: 40,9659.макс: 2273
замена строки: средняя: 18,4566.макс: 1478
string strOrg = "<ul>\n" +
"<li>abc\n" +
"<li>bbc\n" +
"<li>xyz\n" +
"<li>pqr </li></li></li></li>\n" +
"</ul>";
string strFinal = FixUnorderedList(strOrg);
public static string FixUnorderedList(string str)
{
//remove what we're going to put back later
//(these could be placed on the same line, one after the other)
str = str.Replace("\n", string.Empty);
str = str.Replace("</li>", string.Empty);
str = str.Replace("<ul>", string.Empty);
str = str.Replace("</ul>", string.Empty);
//get each li element
string[] astrLIs = str.Split(new string[] { "<li>" }, StringSplitOptions.RemoveEmptyEntries);
//rebuild the list correctly
string strFinal = "<ul>";
foreach(string strLI in astrLIs)
strFinal += string.Format("\n<li>{0}</li>", strLI.Trim());
strFinal += "\n</ul>";
return strFinal;
}