我想从数据库中查询字符串(html)并将其显示在网页上。问题是数据有
<p> around the text (ending with </p>
我想在我的viewmodel或controlleraction中删除返回此数据的外部标记。在C#中执行此操作的最佳方法是什么?
答案 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);