我有一个字符串如下:
string chart = "<div id=\"divOne\">Label.</div>;"
动态生成,无法控制,并且想要删除文本“标签”。来自封闭的div元素。
我尝试了以下但我的正则表达式知识仍然限于让它工作:
System.Text.RegularExpressions.Regex.Replace(chart, @"/(<div[^>]+>)[^<]+(<\/div>)/i", "");
答案 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();