如何使用正则表达式替换 Notepad++ 中标签之间的文本

Posted

技术标签:

【中文标题】如何使用正则表达式替换 Notepad++ 中标签之间的文本【英文标题】:How to use regex to replace text between tags in Notepad++ 【发布时间】:2013-07-27 09:13:07 【问题描述】:

我有这样的代码:

<pre><code>Some <a href="">html</a> code</code></pre>

我需要转义 &lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt; 标签之间的 HTML。我有很多标签,所以我想 - 为什么不让正则表达式为我做这件事。问题是我不知道怎么做。我见过很多使用 Google 和 *** 的例子,但我什么都不能用。有人可以帮我吗?

例子:

<pre><code>Some <a href="http">HTML</a> code</code></pre>

<pre><code>Some &lt;a href=&quot;http&quot;&gt;HTML&lt;/a&gt; code</code></pre>

或者只是一个正则表达式,这样我就可以一一替换&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt; 标签之间的任何内容。我几乎可以肯定这是可以做到的。

【问题讨论】:

如果您有多层嵌套标签,我不相信正则表达式可以为您做到这一点。 HTML 不是regular language。 你能举一个你想要的结果的例子吗? @Bohemian 确定我已经更新了问题 【参考方案1】:

返回“&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt; 之间的事物”的正则表达式可能是

/(?<=<pre><code>).*?(?=<\/code><\/pre>)/

这使用环视表达式来分隔“匹配的事物”。通常在带有嵌套标签的情况下使用正则表达式充满危险,最好使用专门为解析 xml、html 等工作而制作的“真实工具”。我自己是 Beautiful Soup (Python) 的忠实粉丝。不熟悉Notepad++,所以不确定它的正则表达式方言是否完全匹配这个表达式。

【讨论】:

【参考方案2】:

这个正则表达式将匹配锚标记的部分 你需要放回去:

<pre><code>([^<]*?)<a href="(.*?)">(.*?)</a>(.*?)</code></pre>

查看live demo,这表明它匹配正确,并且还显示了作为组捕获的各个部分,我们将在替换字符串中引用这些部分(见下文)。

使用上面的正则表达式进行以下替换:

<pre><code>\1&lt;a href=&quot;\2&quot;&gt;\3&lt;/a&gt;\4</pre></code>

\1\2 等是正则表达式中捕获的组,它们放回了我们在比赛中保留的内容。

【讨论】:

以上是关于如何使用正则表达式替换 Notepad++ 中标签之间的文本的主要内容,如果未能解决你的问题,请参考以下文章

java 使用正则表达式过滤HTML中标签

python 正则表达式 提取网页中标签的中文

正则表达式删除记事本++中标签之间的文本

如何在 Notepad++ 正则表达式查找/替换中保留括号

通过正则表达式在 Notepad++ 中替换时如何使用条件

[技]如何在 notepad++ 里面使用正则表达式进行替换