Notepad ++ Regex删除样式

时间:2014-02-21 03:33:05

标签: regex notepad++

我需要从很多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的所有内容。所以我只需要没有其他任何东西的干净标签。

任何人都可以帮我这个吗?

亲切的问候

EDIT 通过pastebin检查整个文件:http://pastebin.com/0tNwGUWP

5 个答案:

答案 0 :(得分:3)

我认为这种模式会删除“p”和“span”标签中的所有样式:

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

=&GT;它是如何工作的:

  • ( (?<=<p) | (?<=<span) ):这是一个 LookBehind 块,以确保 我们正在寻找的字符串是<p <span

  • 之后的字符串
  • [^>]*:搜索任何不是>字符的字符

  • (?=>):这是一个 LookAfter 块,以确保 我们要找的字符串在>字符

  • 之前

PS:在Notepad ++上测试

答案 1 :(得分:0)

如果您提供的样本代表您需要处理的内容,那么以下快速而肮脏的解决方案将起作用:

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

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

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

有充分的理由说明其他人的海报说不要试图以这种方式解析HTML。因为正则表达式,你最终会遇到各种各样的麻烦,总的来说无法处理HTML的所有奇怪之处。

答案 2 :(得分:0)

我的建议如下。

正如我在示例文本中看到的那样,您只需要处理“p”和“span”标记。而你显然想要删除其中的所有样式。在这种情况下,您可以考虑删除这些标记内的所有内容,保持简单&lt; p&gt;或者&lt; span&gt;。

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

答案 3 :(得分:0)

假设<spanlang=NL输错(应该是<span lang=NL),我会这样做:

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

答案 4 :(得分: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());