我构建了一个扩展,可以将HTML格式的文本转换为更好的列表视图。它会删除所有HTML标记,但会将<h>
和<p>
替换为<br />
,以保持列表视图的可读性。它还缩短了较长帖子的文本。我用HTML.Raw(model.text)
将它放在我的剃刀视图上。
public static string FixHTML(string input, int? strLen)
{
string s = input.Trim();
s = Regex.Replace(s, "</p.*?>", "<br />");
s = Regex.Replace(s, "</h.*?>", "<br />");
s = s.Replace("<br />", "*ret$990^&");
s = Regex.Replace(s, "<.*?>", String.Empty);
s = Regex.Replace(s, "</.*", String.Empty);
s = s.Replace("*ret$990^&", "<br />");
int i = (strLen ?? s.Length);
s = s.Substring(0,(i > s.Length ? s.Length : i));
return(s);
}
问题:如果最后一个字符在<br />
中间被切断,则会弄乱显示的文字。例如它在blah blah blah <br
被切断然后显示不好。我如何使用REGEX(甚至是字符串替换)来查找<b
....的最后一次出现,并且只有在它没有结束>
时才会发现。
我想的是:
s = string.Format(s.Substring(0, s.Length-6) + Regex.Replace(s.Substring(s.Length - 6), "<.*", string.Empty));
这可能会有效,但我的整个转换器似乎正在使用代码来做一些应该相对简单的事情。
我该怎么做?
答案 0 :(得分:2)
试试这个:
s = Regex.Replace(s, "(<|<b|<br|<br/)$", "", RegexOptions.None);