在 Notepad++ 中使用通配符/正则表达式进行查找和替换

在 Notepad++ 中使用通配符/正则表达式进行查找和替换

我有一个具有以下结构的 HTML 代码:

        <td class="tar">
      <div class="bubble in">
        Some Text, I want to keep! And maybe even an image: <img src=
        "12345.png" width="22" height="22" alt="0" class="example" /><br />
        <span class="time"><div style="text-align:right">17:14</span></div>
      </div>
    </td>
  </tr>

  <tr>
    <td class="tal">
      <div class="bubble out">
        Some Text, I want to keep!<br />
        <span class="time"><div style="text-align:right">17:15</span></div>
      </div>
    </td>
  </tr>

这是两个参与者“加入”和“退出”的聊天结构。现在我想用图像延长“加入”的时间码。

以下是我的想法:

找什么:

<div class="bubble in">[^"]*<span class="time"><div style="text-align:right">([0-9]*[0-9]*):([0-9]*[0-9]*)</span></div>

用。。。来代替:

<div class="bubble in">\1<span class="time"><div style="text-align:right">\2\3\4\5\6&#160<img src= "test.png" width="16" height="10" alt="0"/

搜索有效,但替换 \1 不知何故不起作用。你能帮我吗?提前致谢

答案1

不起作用\1,因为您没有捕获该组 - 您需要在其周围加上括号。但是,似乎还有更多问题...当我在 Notepad++ 中使用您的示例尝试时,它找不到匹配项,我也不指望它会找到。

您当前的模式在打开的 div 标签中查找气泡,后跟任意数量的非双引号字符,后跟时间跨度标签。在您的示例中,您首先在 img 标签中使用了双引号,因此它不匹配。
在时间捕获部分,也发生了一些奇怪的事情:您的[0-9]*意思是任意数量的数字 0-9 出现,但随后您重复了它。我猜您实际上只是想要 0-9 两次,然后是冒号,然后是另外两个。

所以:
<div class="bubble in">(.*?)<span class="time"><div style="text-align:right">([0-9]{2}):([0-9]{2})</span></div>

.*?非贪婪地寻找匹配项。但是,如果 div 中的气泡没有时间跨度,那么它将直接离开该 div 并进入其他任何内容,直到找到时间跨度。希望这是您可以应付的事情,否则它会变得非常复杂。告诉[0-9]{2}正则表达式您想要正好两个。如果您的时间没有前导零,则将其更改为{1,2}将在 1 到 2 之间寻找。

最后,在您的替换中 - 现在有 3 个捕获组...“一些文本,我想保留!...”,小时和分钟。所以\4\5\6不存在。哦,别忘了勾选该. matches newline选项,否则您也不会匹配(至少从您的示例中来看)。

祝你好运!

相关内容