Regex以捕获<;李>;标签

本文关键字:gt 标签 lt Regex | 更新日期: 2023-09-27 18:21:57

简单地说,我有这样的HTML:

<ul>
  <li>Unorderd Item 1</li>
  <li>Unordered Item 2</li>
  <li>Unordered Item 3
    <ol>
       <li>Ordered Item 1</li>
       <li>Ordered Item 2</li>
    </ol>
  </li>
  <li>Unordered Item 4</li>
</ul>

我正在寻找一个正则表达式或某种性质的逻辑,它将<li>标记替换为取决于其父列表元素是什么的东西

我可以直接使用RegEx,也可以使用(很可能是我在这里的路由).Net System.Text.RegularExpression类so:

Regex.更换

Regex.匹配

<--我知道我可以/应该使用HTML解析器,但这是与XSLT配置文档一起使用的。因此,使用Regex似乎是最好的方法。-->

期望输出:

<ul>
   <Unordered>Unordered Item 1</Unordered>
   <Unordered>....</Unordered>
     <ol>
        <Ordered>......</Ordered>
        <Ordered>......</Ordered>
     </ol>
   <Unordered>.....</Unordered>
 </ul>  

Regex以捕获<;李>;标签

我会为这个使用HtmlAgilityPack

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlString);
foreach (var li in doc.DocumentNode.Descendants("li"))
{
    if (li.ParentNode.Name == "ul") li.Name = "Unordered";
    if (li.ParentNode.Name == "ol") li.Name = "Ordered";
}
var newHtml = doc.DocumentNode.OuterHtml;

输出:

<ul>
  <unordered>Unorderd Item 1</unordered>
  <unordered>Unordered Item 2</unordered>
  <unordered>Unordered Item 3
    <ol>
       <ordered>Ordered Item 1</ordered>
       <ordered>Ordered Item 2</ordered>
    </ol>
  </unordered>
  <unordered>Unordered Item 4</unordered>
</ul>