首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于删除<ul>和<li> C#之间的<a>标记文本的正则表达式

用于删除<ul>和<li> C#之间的<a>标记文本的正则表达式
EN

Stack Overflow用户
提问于 2012-11-30 19:40:07
回答 2查看 1.6K关注 0票数 1

我有以下的html,我尝试了许多正则表达式来删除只在ul标签和li标签之间的超链接内容/文本,但没有找到任何用于删除标签文本的正则表达式。我希望,当一个标签在ul和li标签下时,我想用空字符串替换标签文本。

代码语言:javascript
复制
<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的字符串。

代码语言:javascript
复制
input = Regex.Replace(input, @"<ul[^>]*?><li><a[^>]*?>(?<option>.*?)</ul></li></a>", string.Empty);

请帮帮我。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-30 19:47:59

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

HTML既不严格,也不规范其格式。

使用htmlagilitypack

正则表达式用于正则表达式

您可以使用此代码通过HtmlAgilityPack检索它

代码语言:javascript
复制
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

我只想使用正则表达式删除标记文本。

代码语言:javascript
复制
Regex.Replace(input,@"(?<=<li[^>]*>)\s*<a.*?(?=</li>)","",RegexOptions.Singleline);
票数 1
EN

Stack Overflow用户

发布于 2012-11-30 19:47:19

Regex is a poor choice for parsing HTML,特别是不一致的超文本标记语言。

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

到底什么是超文本标记语言敏捷包?

这是一个敏捷的HTML解析器,它构建了一个读/写DOM,并支持普通的XPATH或XSLT (实际上您不需要理解XPATH或XSLT就可以使用它,不用担心……)。它是一个.NET代码库,允许你解析“网络之外”的超文本标记语言文件。该解析器对“真实世界”格式错误的HTML非常容忍。对象模型非常类似于所提出的System.Xml,只是针对的是超文本标记语言文档(或流)。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13644563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档