如何使用记事本++仅在特定div内的文件中用h3替换h2标签

时间:2019-01-31 09:43:30

标签: regex notepad++

我需要在特定div中用h3批量替换h2标签。示例:

        <div class="txt_contenu">
            <h2 style="text-align: justify;">blabla title</h2>
            <p style="text-align: justify;">&nbsp;</p>
            <p>Lorem ipsum <strong>dolor</strong> sit amet.</p>
            <p style="text-align: justify;">&nbsp;</p>
            <h2 style="text-align: justify;">blabla title 2</h2>
            <p style="text-align: justify;">&nbsp;</p>
            <p>other text example</p>
        </div>

应成为:

        <div class="txt_contenu">
            <h3 style="text-align: justify;">blabla title</h3>
            <p style="text-align: justify;">&nbsp;</p>
            <p>Lorem ipsum <strong>dolor</strong> sit amet.</p>
            <p style="text-align: justify;">&nbsp;</p>
            <h3 style="text-align: justify;">blabla title 2</h3>
            <p style="text-align: justify;">&nbsp;</p>
            <p>other text example</p>
        </div>

我不太擅长正则表达式,这不是我的代码,我正在使用notepad ++来完成这项工作,但找不到有效的解决方案...

所以,如果有人有一个易于实现的解决方案(我需要在许多html文件上执行此操作),我将非常感谢。 谢谢。

我已经尝试过此正则表达式:

(<div class=\"txt_contenu\">.*?)(h2)(.*?)(</div>) 

,并尝试在记事本++中替换为$ 1h3 $ 3 它可以工作,但只针对div内的第一个h2 ...

screenshot of notepad++ find replace

1 个答案:

答案 0 :(得分:0)

尝试以下正则表达式/过程:

  1. 将光标定位在文件的开头(手动或使用 Control + Home Control + G = 0)
  2. 启动“替换”对话框( Control + H
  3. 检查搜索模式=正则表达式
  4. 取消选中 Wrap around(重要的是,我们会让notepad ++崩溃)
  5. 找到什么=> ((?:^|</div>)[\s\S]*?<div[ ]class="txt_contenu">)|\G((?:(?!</div>)[\s\S])*?)<h2([\s\S]*?)</h2>
  6. 替换为=> (?1\1)(?3\2<h3\3</h3>)
  7. 全部替换

注意:只要<div class="txt_contenu">

内没有div,此解决方案就可以使用

如果您可以在<div class="txt_contenu">(嵌套)中找到其他div,则可以编写一个包含宏的解决方案。请让我知道是否是这种情况。


测试输入

<h2>foobar</h2>
<div class="whatever">
    <h2>foobar</h2>
</div>
<div class="txt_contenu">
    <h2 style="text-align: justify;">blabla title</h2>
    <p style="text-align: justify;">&nbsp;</p>
    <p>Lorem ipsum <strong>dolor</strong> sit amet.</p>
    <p style="text-align: justify;">&nbsp;</p>
    <h2 style="text-align: justify;">blabla title 2</h2>
    <p style="text-align: justify;">&nbsp;</p>
    <p>other text example</p>
</div>
<h2>foobar</h2>
<div class="whatever">
    <h2>foobar</h2>
</div>
<div class="txt_contenu">
    <h2 style="text-align: justify;">blabla title</h2>
    <p style="text-align: justify;">&nbsp;</p>
    <p>Lorem ipsum <strong>dolor</strong> sit amet.</p>
    <p style="text-align: justify;">&nbsp;</p>
    <h2 style="text-align: justify;">blabla title 2</h2>
    <p style="text-align: justify;">&nbsp;</p>
    <p>other text example</p>
</div>
<h2>foobar</h2>
<div class="whatever">
    <h2>foobar</h2>
</div>

测试输出

<h2>foobar</h2>
<div class="whatever">
    <h2>foobar</h2>
</div>
<div class="txt_contenu">
    <h3 style="text-align: justify;">blabla title</h3>
    <p style="text-align: justify;">&nbsp;</p>
    <p>Lorem ipsum <strong>dolor</strong> sit amet.</p>
    <p style="text-align: justify;">&nbsp;</p>
    <h3 style="text-align: justify;">blabla title 2</h3>
    <p style="text-align: justify;">&nbsp;</p>
    <p>other text example</p>
</div>
<h2>foobar</h2>
<div class="whatever">
    <h2>foobar</h2>
</div>
<div class="txt_contenu">
    <h3 style="text-align: justify;">blabla title</h3>
    <p style="text-align: justify;">&nbsp;</p>
    <p>Lorem ipsum <strong>dolor</strong> sit amet.</p>
    <p style="text-align: justify;">&nbsp;</p>
    <h3 style="text-align: justify;">blabla title 2</h3>
    <p style="text-align: justify;">&nbsp;</p>
    <p>other text example</p>
</div>
<h2>foobar</h2>
<div class="whatever">
    <h2>foobar</h2>
</div>