在有人抱怨不使用正则表达式来解析HTML之前,我引用了一个优雅的解决方案我之前的一个问题很快被标记为"answered"另一个问题的答案抱怨不使用正则表达式来解析HTML(最终从我的问题中删除了):Regex: Find groups of lowercase letters between HTML tag

我再次使用epubs(在Sigil中),这次清理了InDesign CC的XHTML输出 . 与以前的ID版本不同,它现在围绕许多具有额外 <div> 标签的对象,用于某种定位/布局原因 . 我正在编写自己的干净CSS,因此在不生成CSS的情况下导出epub,在其他 <div> 周围留下无关的 <div> 标签,有时包含不必要的 <div> 的嵌套结构 .

我正在处理的一个例子:

<div><!--unnecessary-->
    <div class="figure-box">
        <h4 class="f-n"><b class="b">Figure 1.3: Foobar</b></h4>
        <div><!--unnecessary-->
            <div class="figure">
                <img alt="foo" src="../Images/bar.jpg"/>
            </div>
        </div>
        <p class="f-ct">This is a caption, yadda yadda.</p>
        <p class="f-src">Source: Copyright blah blah.</p>
    </div>
</div>

注意: <!--unnecessary--> 注释是说明性的,并且不在实际代码中 .

我写了这个正则表达式试图删除没有样式的周围 <div> 标签取得了一些成功,但我希望有一个更优雅的解决方案:

^(\s*)<div>\n\s*(<div class=".+?">.+?</div>)\n\1</div>

上面的字符串匹配最外面的 <div> ,然后我可以用 \1\2 替换以保留内容和第一个缩进(尽管缩进不是绝对必要的) .

这个问题是我必须多次 find/replace all 才能获得并删除所有嵌套的不必要的 <div> .

这是不是很好,或者是否有像我上面为此目的链接的解决方案?