如何使用正则表达式替换 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>
我需要转义 <pre><code></code></pre>
标签之间的 HTML。我有很多标签,所以我想 - 为什么不让正则表达式为我做这件事。问题是我不知道怎么做。我见过很多使用 Google 和 *** 的例子,但我什么都不能用。有人可以帮我吗?
例子:
<pre><code>Some <a href="http">HTML</a> code</code></pre>
到
<pre><code>Some <a href="http">HTML</a> code</code></pre>
或者只是一个正则表达式,这样我就可以一一替换<pre><code>
和</code></pre>
标签之间的任何内容。我几乎可以肯定这是可以做到的。
【问题讨论】:
如果您有多层嵌套标签,我不相信正则表达式可以为您做到这一点。 HTML 不是regular language。 你能举一个你想要的结果的例子吗? @Bohemian 确定我已经更新了问题 【参考方案1】:返回“<pre><code>
和 </code></pre>
之间的事物”的正则表达式可能是
/(?<=<pre><code>).*?(?=<\/code><\/pre>)/
这使用环视表达式来分隔“匹配的事物”。通常在带有嵌套标签的情况下使用正则表达式充满危险,最好使用专门为解析 xml、html 等工作而制作的“真实工具”。我自己是 Beautiful Soup (Python) 的忠实粉丝。不熟悉Notepad++,所以不确定它的正则表达式方言是否完全匹配这个表达式。
【讨论】:
【参考方案2】:这个正则表达式将匹配锚标记的部分 你需要放回去:
<pre><code>([^<]*?)<a href="(.*?)">(.*?)</a>(.*?)</code></pre>
查看live demo,这表明它匹配正确,并且还显示了作为组捕获的各个部分,我们将在替换字符串中引用这些部分(见下文)。
使用上面的正则表达式进行以下替换:
<pre><code>\1<a href="\2">\3</a>\4</pre></code>
\1
、\2
等是正则表达式中捕获的组,它们放回了我们在比赛中保留的内容。
【讨论】:
以上是关于如何使用正则表达式替换 Notepad++ 中标签之间的文本的主要内容,如果未能解决你的问题,请参考以下文章