c# - 正则表达式删除大量文本
问题描述
在我们的 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 标签
解决方案
除了明显的“使用 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>";
推荐阅读
- javascript - 滚动位置到达底部时如何推送数组中的项目?
- php - 无法获取请求数据 laravel 5.6
- python - 是否可以从 python 日期时间对象中提取格式字符串(例如“YY-mm-DD HH:MM:SS.sss”)?
- amazon-web-services - 如何在 cloudwatch 警报上通知 lambda 结果?
- c# - 该软件包需要 NuGet 客户端版本“3.6.0”或更高版本
- c++ - SQLite char* conversion in C++
- amazon-web-services - 如何在 AWS PowerShell 工具中使用 Grant-EC2SecurityGroupIngress 指定端口范围
- c# - 在引用的类库上使用反射
- python - Building custom configuration parser to read method chaining style of configuration string
- encryption - What is lua obfuscation?