使用C#Regex删除div标签中包含的文本

时间:2011-05-11 15:05:43

标签: c# regex

我有一个字符串如下: string chart = "<div id=\"divOne\">Label.</div>;"动态生成,无法控制,并且想要删除文本“标签”。来自封闭的div元素。

我尝试了以下但我的正则表达式知识仍然限于让它工作: System.Text.RegularExpressions.Regex.Replace(chart, @"/(<div[^>]+>)[^<]+(<\/div>)/i", "");

6 个答案:

答案 0 :(得分:2)

使用LinqPad我得到了这个代码片段。希望它能正确解决您的问题。

string chart = "<div id=\"divOne\">Label.</div>;";

var regex = new System.Text.RegularExpressions.Regex(@">.*<");

var result = regex.Replace(chart, "><");

result.Dump(); // prints <div id="divOne"></div>

基本上,它会找到相对的尖括号之间的所有字符,并替换它。

您采取的方法取决于替换需要多强大。如果您要在更一般的级别上使用此目标,您希望使用MatchEvaluator。此示例产生类似的结果:

string pattern = @"<(?<element>\w*) (?<attrs>.*)>(?<contents>.*)</(?<elementClose>.*>)";

var x = System.Text.RegularExpressions
    .Regex.Replace(chart, pattern, m => m.Value.Replace(m.Groups["contents"].Value, ""));

在这种情况下,您使用的模式是可自定义的,但它利用了命名的组捕获。它允许您隔离匹配的部分,并按名称引用它们。

答案 1 :(得分:1)

试试这个正则表达式:

<div\b[^>]*>(.*?)<\/div>

以下产生输出<div></div>

System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"<div\b[^>]*>(.*?)<\/div>");
Console.WriteLine(regex.Replace("<div>Label 1.</div>","<div></div>"));
Console.ReadLine();

答案 2 :(得分:1)

你的正则表达式看起来不错,(但是没有指定'/.../i'分隔符和修饰符)。并使用'$1$2'作为替换字符串:

var re = new System.Text.RegularExpressions.Regex(@"(?i)(<div[^>]+>)[^<]+(<\/div>)");
var text = regex.Replace(text, "$1$2");

答案 3 :(得分:0)

您必须只编写一个模式来选择div标签中的文本。

Regex.Replace(chart,yourPattern,string.empty);

答案 4 :(得分:0)

我对你的问题感到有些困惑;听起来您正在解析一些预先生成的HTML,并希望删除chart标记内发生的<div>值的所有实例。如果这是正确的,试试这个:

"(<div[^>]*>[^<]*)"+chart+"([^<]*</div>)"

返回第一个&amp;第二个分组连接在一起,您应该<div>返回chart

答案 5 :(得分:0)

这是比正则表达式更好的方法。

var element = XElement.Parse("<div id=\"divOne\">Label.</div>");
element.Value = "";
var value = element.ToString();

RegEx match open tags except XHTML self-contained tags