Suchen und Ersetzen mithilfe von Platzhalter-/Regex-Zeichen in Notepad++

Suchen und Ersetzen mithilfe von Platzhalter-/Regex-Zeichen in Notepad++

Ich habe einen HTML-Code mit folgender Struktur:

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

Dies ist der Aufbau eines Chats mit den beiden Teilnehmern "Bubble In" und "Bubble Out". Nun möchte ich den Timecode des "Bubble In" um ein Bild erweitern.

Hier ist, was mir eingefallen ist:

Finde was:

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

Ersetzen mit:

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

Die Suche funktioniert, aber das Ersetzen von \1 funktioniert irgendwie nicht. Könnt ihr mir helfen? Danke im Voraus

Antwort1

Das \1funktioniert nicht, weil Sie diese Gruppe nicht erfassen – Sie müssten Klammern darum setzen. Aber es scheint, dass es noch weitere Probleme gibt … Wenn ich es in Notepad++ mit Ihrem Beispiel versuche, findet es keine Übereinstimmung, und das hätte ich auch nicht erwartet.

Ihr aktuelles Muster sucht nach der Blase im offenen Div-Tag, gefolgt von einer beliebigen Anzahl von Zeichen, die keine Anführungszeichen sind, gefolgt vom Zeitspannen-Tag. In Ihrem Beispiel haben Sie zuerst Anführungszeichen im img-Tag, also stimmt es nicht überein.
Im Teil zur Zeiterfassung passieren auch einige seltsame Dinge: Sie [0-9]*meinen eine beliebige Anzahl von Vorkommen der Ziffern 0-9, aber dann wiederholen Sie es. Ich vermute, dass Sie wirklich nur zweimal 0-9 wollten, gefolgt von einem Doppelpunkt, gefolgt von zwei weiteren.

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

Das .*?sucht nicht gierig nach Übereinstimmungen. Aber wenn eine Blase in einem Div nicht den Zeitrahmen hat, wird sie direkt aus diesem Div heraus und in irgendetwas anderes hineingehen, bis sie einen Zeitrahmen findet. Hoffentlich ist das etwas, womit Sie klarkommen, sonst wird es wirklich kompliziert. Das [0-9]{2}sagt dem regulären Ausdruck, dass Sie genau zwei wollen. Wenn Sie keine führenden Nullen bei den Zeiten haben, ändern Sie es in „ {1,2}which“ sucht nach einem Wert zwischen eins und zwei.

Schließlich gibt es in Ihrem Ersetzen jetzt 3 erfasste Gruppen ... „Einen Text, den ich behalten möchte! ...“, die Stunden und die Minuten. \4\5\6Sind also nicht vorhanden. Oh, und vergessen Sie nicht, die . matches newlineOption anzukreuzen, sonst werden Sie auch keine Übereinstimmung finden (zumindest aus Ihrem Beispiel).

Viel Glück!

verwandte Informationen