如何从字符串中删除外部<p> ... </p>

时间:2011-01-30 22:46:50

标签: c# html asp.net-mvc

我想从数据库中查询字符串(html)并将其显示在网页上。问题是数据有

 <p> around the text (ending with </p>

我想在我的viewmodel或controlleraction中删除返回此数据的外部标记。在C#中执行此操作的最佳方法是什么?

6 个答案:

答案 0 :(得分:9)

可能会因你的需要而过度杀戮,但是如果你想解析HTML,你可以使用HtmlAgilityPack - 一般来说这里的解决方案比大多数建议的更清晰,尽管它可能没那么高效:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<p> around the text (ending with </p>");
string result = doc.DocumentNode.FirstChild.InnerHtml;

答案 1 :(得分:3)

如果您完全确定字符串将始终包含该标记,则可以使用myString.Substring(3, myString.Length-7)之类的String.Substring

更健壮的方法是手动编写适当的测试代码或使用正则表达式,或者最终使用BrokenGlass's answer建议的HTML解析器。

更新:使用正则表达式:

String filteredString = Regex.Match(myString, "^<p>(.*)</p>").ToString();

您可以在初始^之后添加\ s以删除前导空格。此外,您可以检查匹配的结果,以查看字符串是否与<p>...</p>模式匹配。 This也可以提供帮助。

答案 2 :(得分:0)

如果数据始终被<p> ... </p>包围:

string withoutParas = withParas.Substring(3, withParas.Length - 7);

答案 3 :(得分:0)

尝试使用字符串函数Remove()传递<p>的FirstIndex()和长度为3的</p>的最后一个索引

答案 4 :(得分:0)

如果绝对保证你的字符串总是符合<p>...</p>的模式,那么使用data.Substring(3, data.Length - 6)的其他解决方案就足够了。但是,如果它有可能在所有不同的中看起来,那么真的需要使用HTML解析器。共识是HTML Agility Pack是要走的路。

答案 5 :(得分:-1)

s = s.Replace("<p>", String.Empty).Replace("</p>", String.Empty);