在 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選項,否則您將不會匹配(至少從您的示例來看)。

祝你好運!

相關內容