Buscar y reemplazar usando caracteres comodín/regex en Notepad++

Buscar y reemplazar usando caracteres comodín/regex en Notepad++

Tengo un Código HTML con la siguiente estructura:

        <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 es la estructura de una charla en la que los dos participantes "entran" y "salen". Ahora quiero ampliar el código de tiempo de la "burbuja" con una imagen.

Esto es lo que se me ocurrió:

Encontrar que:

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

Reemplazar con:

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

La búsqueda funciona pero reemplazar \1 no funciona de alguna manera. ¿Me puede ayudar? gracias de antemano

Respuesta1

No \1funciona porque no está capturando ese grupo; necesitaría ponerlo entre paréntesis. Pero parece que hay más problemas... Cuando lo pruebo en Notepad++ con su ejemplo, no encuentra una coincidencia, y no esperaría que así fuera.

Su patrón actual busca la burbuja en la etiqueta div abierta, seguida de cualquier número de caracteres que no sean comillas dobles, seguida de la etiqueta de intervalo de tiempo. En su ejemplo, primero tiene comillas dobles en la etiqueta img, por lo que no coincide.
En la parte de captura de tiempo, también suceden algunas cosas extrañas: te [0-9]*refieres a cualquier número de apariciones de los dígitos del 0 al 9, pero luego lo repites. Supongo que en realidad solo querías 0-9 dos veces, seguido de dos puntos y seguido de dos más.

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

Buscarán .*?coincidencias sin avidez. Pero, si una burbuja en un div no tiene el lapso de tiempo, entonces saldrá de ese div y entrará en cualquier otra cosa hasta que encuentre un lapso de tiempo. Esperemos que sea algo que puedas afrontar, de lo contrario se vuelve muy complicado. Le [0-9]{2}dice a la expresión regular que quieres exactamente dos. Si no tiene ceros a la izquierda en los tiempos, cámbielos a {1,2}los que buscarán entre uno y dos.

Finalmente, en su reemplazo, ahora hay 3 grupos capturados... El "¡Algo de texto que quiero conservar!...", las horas y los minutos. Entonces \4\5\6no están presentes. Ah, y no olvides marcar la . matches newlineopción, o no coincidirás con ninguna de las dos (al menos según tu ejemplo).

¡Buena suerte!

información relacionada