繁体   English   中英

使用 C# 正则表达式删除包含在 div 标签中的文本

[英]Remove text enclosed in a div tag using C# Regex

我有一个字符串如下: string chart = "<div id=\\"divOne\\">Label.</div>;" 这是在没有我的控制的情况下动态生成的,并希望删除文本“标签”。 来自封闭的 div 元素。

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

使用 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, ""));

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

试试这个为你的正则表达式:

<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();

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

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

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

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

我对你的问题有点困惑; 听起来您正在解析一些预先生成的 HTML,并希望删除<div>标记中出现的chart值的所有实例。 如果这是正确的,请尝试以下操作:

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

返回连接在一起的第一个和第二个分组,您应该将<div>返回 sans chart

这是比 Regex 更好的方法。

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

RegEx 匹配除 XHTML 自包含标签之外的开放标签

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM