Найти и заменить с помощью подстановочных знаков/регулярных выражений в 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}который будет искать от одного до двух.

Наконец, в вашей замене - теперь есть 3 захваченные группы... "Некоторый текст, я хочу сохранить!...", часы и минуты. Так что \4\5\6их нет. О, и не забудьте отметить опцию . matches newline, иначе вы не будете соответствовать ни тому, ни другому (по крайней мере, из вашего примера).

Удачи!

Связанный контент