删除字符串的父标记,直到它的结束标记从Html字符串

本文关键字:字符串 结束 Html 删除 | 更新日期: 2023-09-27 18:06:04

我有一个很长的字符串,我是什么,试图完成的是从字符串的<tr>父标记到他的关闭标记</tr>删除该字符串中的一部分。(希望我说得够清楚)。

所以当我调用方法RemoveSection与文本"Search Integration"


Html之前
  <tr>
    <td class='"SectionHeaderHolder'" colspan='"4'">
    <p class='"SectionHeader'">Header XX<span class='"help'">Help</span></p>
    </td>
    </tr>
    <tr>
    <td class='"SectionHeaderHolder'" colspan='"4'">
    <p class='"SectionHeader'">Search Integration<span class='"help'">Help</span></p>
    </td>
    </tr>
    <tr>
    <td class='"SectionHeaderHolder'" colspan='"4'">
    <p class='"SectionHeader'">Header YY<span class='"help'">Help</span></p>
    </td>
    </tr>

  • Remove函数获取的字符串将在<p class='"SectionHeader'">
  • 这个字符串只有一个section -所以第一次出现应该由remove函数处理。

Html之后
 <tr>
    <td class='"SectionHeaderHolder'" colspan='"4'">
    <p class='"SectionHeader'">Header XX<span class='"help'">Help</span></p>
    </td>
    </tr>
   
    <tr>
    <td class='"SectionHeaderHolder'" colspan='"4'">
    <p class='"SectionHeader'">Header YY<span class='"help'">Help</span></p>
    </td>
    </tr>

删除字符串的父标记,直到它的结束标记从Html字符串

你可以使用htmllagilitypack。一个简单的LinqPad示例:

void Main()
{
    string input = "<tr><td class='"SectionHeaderHolder'" colspan='"4'"><p class='"SectionHeader'">Header XX<span class='"help'">Help</span></p></td></tr>"
                + "<tr><td class='"SectionHeaderHolder'" colspan='"4'">    <p class='"SectionHeader'">Search Integration<span class='"help'">Help</span></p>    </td>    </tr>"
                + "<tr><td class='"SectionHeaderHolder'" colspan='"4'">    <p class='"SectionHeader'">Header YY<span class='"help'">Help</span></p>    </td>    </tr>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(input);
    doc.DocumentNode.SelectSingleNode("//p[text()='Search Integration']").ParentNode.ParentNode.Remove();
    string output = doc.DocumentNode.OuterHtml;
    input.Dump();
    output.Dump();
}

虽然我仍然推荐公认的解决方案,但同样的事情可以使用普通的正则表达式

string search = "Search Integration";
string pattern = "<tr(?:(?!/?<tr).)*" + search + "(?:(?!/?tr).)*/tr>";
Regex r = new Regex(pattern, RegexOptions.Singleline);
string result = r.Replace(text, "");

演示:https://dotnetfiddle.net/OcV6E5