我有一个字符串,可以有一些html标签。我想删除其中一些(包含数据),但不是所有标签。
事实上,我想删除<img />
和<div>...</div>
。
例如,如果我有字符串hello <div>bye bye</div> marco
我想获得hello marco
。
如何在C#上执行此操作?
答案 0 :(得分:7)
我认为您了解人们对parsing HTML with regex的一般看法。我建议你使用HTML解析器,例如HTML Agility Pack。
以下是一个示例:
class Program
{
static void Main()
{
var doc = new HtmlDocument();
doc.LoadHtml("hello <div>bye bye</div> marco <img src=\"http://example.com\"/> test");
for (int i = 0; i < doc.DocumentNode.ChildNodes.Count; i++)
{
var child = doc.DocumentNode.ChildNodes[i];
if (child.NodeType == HtmlNodeType.Element && new[] { "div", "img" }.Contains(child.Name, StringComparer.OrdinalIgnoreCase))
{
doc.DocumentNode.RemoveChild(child);
}
}
var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
{
doc.Save(writer);
}
Console.WriteLine(sb); // prints "hello marco test"
}
}
答案 1 :(得分:2)
将正则表达式用于XML并不是一个好主意。根据语言,您应该使用一些XML库。
在这种情况下,正则表达式非常简单:
string s = "hello <div>bye bye</div> marco <img />";
Regex rgx = new Regex("(<div>[^<]*</div>)|(<img */>)");
s = rgx.Replace(s, "");