首页 > 解决方案 > 正则表达式删除大量文本

问题描述

在我们的 CMS 中,我们使用了一些标签,这些标签在导出到其他系统时应该被替换。

替换代码如下:

 var rxStr = "<div[^<]+class=([\"'])related-document-content\\1.*</div>";
 var rx = new System.Text.RegularExpressions.Regex(rxStr,
            System.Text.RegularExpressions.RegexOptions.IgnoreCase);
 bodyText = rx.Replace(bodyText, "");

当 rxStr 中有标记的实例时,就会出现我们的问题:

<p>First paragraph</p>
<div class='related-document-content' id='457'>First related text</div>
<p>Second paragraph</p>
<div class='related-document-content' id='458'>Second related text</div>
<p>Third paragraph</p>

当代码运行时,它会删除第二段,输出将是

<p>First paragraph</p>
<p>Third paragraph</p>

谁能帮我调整代码,以便只删除 div 标签

标签: c#regex

解决方案


除了明显的“使用 HTML 解析器/写入”之外:

您的正则表达式匹配的是<下一个 HTML 标记,这就是它跳过一个的原因。您rxStr寻找“除了下一个打开的标签” <div[^<]+

相反,它应该寻找 "除了当前标签的结尾之外的任何内容" <div[^>]+。然后,您还将添加>到您的正则表达式中。见下文:

// Added [^>]+> towards the end.
// Also adding () within the div so you can debug better which matches were found.
var rxStr = "<div[^>]+class=([\"'])related-document-content\\1[^>]*>(.*)</div>";

如果您的 div 的 innerHTML 实际上是纯文本使用[^<]*,而不是.*

var rxStr = "<div[^>]+class=([\"'])related-document-content\\1[^>]*>([^<]*)</div>";

推荐阅读