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

0

Eu 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 do "bubble in" com uma imagem.

Aqui está o que eu criei:

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>

Substitua por:

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

A pesquisa funciona, mas substituir \ 1 não funciona de alguma forma. Você pode me ajudar? Agradecemos antecipadamente

    
por Eggsplorer 01.09.2014 / 16:01

1 resposta

0

O não funciona porque você não está capturando esse grupo - você precisaria colocar parênteses em torno dele. Mas, parece que há mais problemas ... Quando eu tento no Notepad ++ com o seu exemplo, ele não encontra uma correspondência, e eu não esperava.

Seu padrão atual procura o balão na tag div aberta, seguido por qualquer número de caracteres que não sejam aspas duplas, seguido pela tag de intervalo de tempo. No seu exemplo, você tem aspas duplas na tag img primeiro, portanto, não corresponde. Na parte de captura de tempo, há também algumas coisas estranhas acontecendo: seu [0-9]* significa qualquer número de ocorrências de dígitos 0-9, mas depois você o repete. Eu estou supondo que você realmente só queria 0-9 duas vezes, seguido por dois pontos, seguidos por mais dois.

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

O .*? procurará não-vivamente por correspondências. Mas, se uma bolha em div não tiver o intervalo de tempo, então ela sairá dessa div para qualquer outra coisa até encontrar um intervalo de tempo. Espero que isso seja algo que você possa enfrentar, caso contrário, será realmente complicado. O [0-9]{2} diz ao regex que você quer exatamente dois. Se você não tiver zeros à esquerda em horas, altere-o para {1,2} , que procurará entre um e dois.

Finalmente, no seu substituto - agora há 3 grupos capturados ... O "Algum texto, eu quero manter! ...", as horas e os minutos. Então não está presente. Ah, e não esqueça de marcar o . corresponde à opção newline , ou você não irá corresponder (pelo menos a partir do seu exemplo).

Boa sorte!

    
por 05.09.2014 / 14:12