Sitemap.xml中的RegEx:如果后代节点文件类型不是html,如何删除节点?

时间:2016-02-14 17:59:29

标签: regex xml sitemap

我有一个帮助创作工具生成的站点地图。它列出了帮助系统中的每个文件。我只想要html / htm文件。结构如下所示:

<url>
    <loc>https://help.website.com/welcome.htm</loc>
</url>
<url>
    <loc>https://help.website.com/Images/prettyButterfly.png</loc>
</url>
<url>
    <loc>https://help.website.com/Resources/Stylesheets/master.css</loc>
</url>
<url>
    <loc>https://help.website.com/Resources/Scripts/init.js</loc>
</url>
<url>
    <loc>https://help.website.com/gettingStarted/firstSteps.html</loc>
</url>

我可以使用什么正则表达式去除不包含html或htm后代节点的节点(从<url></url>)?我打算使用Notepad ++进行搜索。

我不是一个伟大的正则表达式,我尝试了各种各样的事情无济于事,我真的可以在这里使用一些专家帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用以下表达式:

(<url>\s*<loc>[^<]*\.html?<\/loc>\s*<\/url>)|<url>\s*<loc>[^<]*<\/loc>\s*<\/url>\n?

并用第一个捕获组\1替换每个匹配。

<强>解释

  • (<url>\s*<loc>[^<]*\.html?<\/loc>\s*<\/url>) - 捕获组以匹配<url>节点以<loc>.html
  • 结尾的.htm个节点
  • | - 替代..或:
  • <url>\s*<loc>[^<]*<\/loc>\s*<\/url> - 匹配其他<url>个节点

换句话说,这匹配包含单个<url>节点的每个<loc>节点,并用第一个捕获组替换每个节点。由于仅捕获具有HTML / HTM扩展名的节点,因此将删除其他节点。