2014-02-21 170 views
1

我需要从大量的html页面中删除一些标签。 最近我在记事本++Notepad ++正则表达式删除样式

中发现了正则表达式的选项。 我需要什么?

例子:

<p class=MsoNormal style='margin-left:19.85pt;text-indent:-19.85pt'><spanlang=NL style='font-size:11.0pt;font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang=NL style='font-size:9.0pt;font-family:"Arial","sans-serif"'>zware uitvoering met doorzichtige vulruimte;</span></p> 

我需要删除有关的造型,类和id的一切。所以我只需要有干净的标签没有别的。

任何人都可以帮助我在这一个?

亲切的问候

编辑 通过引擎收录检查整个文件:http://pastebin.com/0tNwGUWP

+1

不要使用正则表达式来解析HTML:http://stackoverflow.com/a/1732454/2812842 –

+0

'更正:'不要使用正则表达式来当嵌套在自己内部的标签涉及到时解析HTML –

+2

你有'

回答

0

如果您提供的样本是代表你需要处理的,那么,下面的快速和肮脏的解决方案将工作:

Find what: [a-z]+='[^']*' 
Replace with: 

Find what: [a-z]+=[a-zA-Z]* 
Replace with: 

您必须首先运行第一个来获取style='...'属性,然后您需要运行第二个来拾取class='...'lang='...'

其他海报人士说,不要试图用这种方式解析HTML。从正则表达式开始,你会遇到各种各样的麻烦,一般来说不能处理所有奇妙的HTML。

0

我的建议如下。

正如我在您的示例文本中看到的,您只有需要处理的“p”和“span”标签。你显然想要删除它们中的所有样式。在这种情况下,您可以考虑删除这些标签中的所有内容,并将其保留为简单< p>或< span>。

我不知道Notepad ++,但一个简单的C#程序可以快速完成这项工作。

0

假设<spanlang=NL一个错字(应该是<span lang=NL),我会做:

查找内容:(<\w+)[^>]*>
替换为:$1>

0

如果你不介意做节目的一点点: HTMLAgilityPack可以轻松地从您的xml/html中删除脚本/样式/观看者。

例子:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

doc.DocumentNode.Descendants() 
       .Where(n => n.Name == "script" || n.Name == "style") 
       .ToList() 
       .ForEach(n => n.Remove()); 
2

我认为这种模式将删除所有样式中的 “P” 和 “跨度” 标签:

((?<=<p)|(?<=<span))[^>]*(?=>)

=>它是如何工作:

  • ((?<=<p) | (?<=<span)):This is a LookBehind座以确保 我们正在寻找的字符串来后<pOR<span

  • [^>]*:搜索不是>字符

  • (?=>)任何字符:这是一个LookAfter块以确保我们正在寻找的
    字符串在>之前有字符

PS:测试在记事本++