c#regex替换最后出现的模式

时间:2018-01-18 18:59:04

标签: c# regex string

我构建了一个扩展,可以将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));

这可能会有效,但我的整个转换器似乎正在使用代码来做一些应该相对简单的事情。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

试试这个:

s = Regex.Replace(s, "(<|<b|<br|<br/)$", "", RegexOptions.None);