Encontre e substitua usando caracteres curinga/regex no Notepad++

Encontre e substitua usando caracteres curinga/regex no Notepad++

Tenho um código HTML com a seguinte estrutura:

        <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>

Esta é a estrutura de um chat com os dois participantes “bubble in” e “bubble out”. Agora quero estender o timecode da "bolha" com uma imagem.

Aqui está o que eu descobri:

Encontre o que:

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

Substituir com:

<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"/

A pesquisa funciona, mas a substituição \1 não funciona de alguma forma. Você pode me ajudar? desde já, obrigado

Responder1

Isso \1não funciona porque você não está capturando esse grupo - seria necessário colocá-lo entre parênteses. Mas parece que há mais problemas ... Quando tento no Notepad ++ com o seu exemplo, ele não encontra uma correspondência, e eu não esperaria que encontrasse.

Seu padrão atual procura a bolha na tag open div, seguida por qualquer número de caracteres que não sejam aspas duplas, seguida pela tag time span. No seu exemplo, você tem aspas duplas na tag img primeiro, então não corresponde.
Na parte de captura de tempo, também há algumas coisas estranhas acontecendo: você [0-9]*significa qualquer número de ocorrências dos dígitos de 0 a 9, mas depois repete. Suponho que você realmente queria apenas 0-9 duas vezes, seguido de dois pontos, seguido de mais dois.

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

Eles .*?não procurarão avidamente por correspondências. Mas, se uma bolha na div não tiver o intervalo de tempo, ela sairá dessa div e entrará em qualquer outra até encontrar um intervalo de tempo. Esperançosamente, isso é algo que você consegue enfrentar, caso contrário, fica muito complicado. O [0-9]{2}informa ao regex que você deseja exatamente dois. Se você não tiver zeros à esquerda nos horários, altere-o para {1,2}procurar entre um e dois.

Finalmente, na sua substituição - agora existem 3 grupos capturados... O "Algum texto, quero manter!...", as horas e os minutos. Então \4\5\6não estão presentes. Ah, e não se esqueça de marcar a . matches newlineopção, ou você também não corresponderá (pelo menos no seu exemplo).

Boa sorte!

informação relacionada