【问题标题】:How to use regex to replace text between tags in Notepad++如何使用正则表达式替换 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 和 Stackoverflow 的例子,但我什么都不能用。有人可以帮我吗?

例子:

<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 确定我已经更新了问题

标签: regex replace notepad++


【解决方案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 等是正则表达式中捕获的组,它们放回了我们在比赛中保留的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多