删除正则表达式<a> tag text that is between <ul> and <li> C#</li></ul></a>

时间:2012-11-30 11:40:07

标签: c# .net regex

我有以下html,我尝试了许多正则表达式来删除仅在ul标签和li标签之间的hperlink内容/文本,但没有找到任何用于删除标签文本的正则表达式。我想要的是,只要标签出现在ul和li标签中,那么我想用空字符串替换标签文本。

<ul id="foot.dir" class="content" >
 <li><a href="http://www.citysearch.com/aboutcitysearch/about_us"  name="search_grid.footer.1.aboutCs" rel="nofollow" id="foot.dir.about">About</a></li>
 <li><a href="http://www.citysearch.com/mobile-application" name="search_grid.footer.1.mobile" id="foot.dir.apps">Apps</a></li>
</ul>

我试过这个正则表达式但它不起作用,这里输入的是包含html的字符串。

input = Regex.Replace(input, @"<ul[^>]*?><li><a[^>]*?>(?<option>.*?)</ul></li></a>", string.Empty);

请帮帮我。谢谢

2 个答案:

答案 0 :(得分:2)

Regex is a poor choice for parsing HTML,特别是不一致的HTML。

我建议使用HTML Agility Pack来解析和更改HTML。

  

什么是Html Agility Pack(HAP)?

     

这是一个敏捷的HTML解析器,它构建一个读/写DOM并支持普通的XPATH或XSLT(你实际上不需要理解XPATH或XSLT来使用它,不用担心......)。它是一个.NET代码库,允许您解析“out of the web”HTML文件。解析器非常容忍“真实世界”格式错误的HTML。对象模型与提出System.Xml非常相似,但对于HTML文档(或流)。

源代码下载了许多示例项目,展示了如何使用该库。

答案 1 :(得分:1)

正则表达式不是解析HTML文件的好选择..

HTML不严格,格式也不规则..

使用htmlagilitypack

正则表达式用于常规表达式

您可以使用此代码使用HtmlAgilityPack

检索它
HtmlDocument doc = new HtmlDocument();
doc.Load(yourStream);

foreach(var item in doc.DocumentNode.SelectNodes("//li[a]"))// select li only if it has anchor tag
{
    item.ParentNode.RemoveChild(item);//removed anchor tag
}
//dont forget to save

我想仅使用正则表达式删除标记文本..

Regex.Replace(input,@"(?<=<li[^>]*>)\s*<a.*?(?=</li>)","",RegexOptions.Singleline);