Suchen und Ersetzen in Sigil mittels regulärer Ausdrücke – Suche nach einem Wort oder mehreren Wörtern mit und ohne Sonderzeichen

Letzte Woche hat mich die Bearbeitung einiger selbst eingescannter Bücher wieder eine gehörige Portion Gehirnschmalz gekostet.

Einige Zeilen hatte ich mit speziellen »p-Tags« versehen – so weit so gut – das war einfach. Anschließend wollte ich jedoch, dass über und unter diesen Zeilen jeweils eine Leerzeile steht.

Bei diesen Reihen handelt es es um eine Art »Unter-Überschrift«. Sie bestehen entweder aus einem Wort oder mehreren Wörtern, teilweise sind auch Sonderzeichen vorhanden.

 

Beispiel:

<p class="p0 sgc-8">Ich bin manchmal sooo doof</p>
<p class="p0 sgc-8">Ich bin manchmal doof</p>
<p class="p0 sgc-8">Ich bin doof</p>
<p class="p0 sgc-8">doof</p>

 

Mein erster Ansatz war absolut dumm.

Mit

<p class="p0 sgc-8">([A-Z|Ä|Ö|Ü|a-z|ß|ä|ö|ü]{1,}\s[A-Z|Ä|Ö|Ü|a-z|ß|ä|ö|ü]{1,})</p>

würde ich zwei Worte mit einem Leerzeichen dazwischen suchen, jedoch würden alle anderen Kombinationen (ein Wort, fünf Wörter, etc.) außen vor bleiben. Bei dieser Variante müsste ich demnach alles von einem Wort bis zu etwa acht Wörtern durchspielen – nein, das ist entschieden zu zeitaufwändig.

 

Zunächst musste ein völlig anderer Denkansatz her.

Irgendwo hatte ich doch gelesen, dass es auch einen regulären Ausdruck für ein Wort gibt (die Bezeichnung »Wort« ist nicht wirklich korrekt, ich weiß – der Einfachheit halber benutze ich jedoch diesen Begriff). Kurz »Tante Google« gefragt, dann hatte ich ihn wieder gefunden, es ist »\w+«.

Maximal sind in dieser Zeile bisher acht Wörter vorgekommen.

Mit dem folgenden regulären Ausdruck würde es also funktionieren.

<p class="p0 sgc-8">(\w+\s{0,}\w+\s{0,}\w+\s{0,}\w+\s{0,}\w+\s{0,}\w+\s{0,}\w+\s{0,}\w+)</p>

Doch erstens ist dieser Ausdruck viel zu lang, außerdem unkomfortabel. Was passiert denn, wenn einmal mehr als acht Wörter vorkommen?

 

Erneut habe ich meine »kleinen grauen Zellen« arbeiten lassen.

Es gibt bei den regulären Ausdrücken doch einen Multiplikator, das Sternchen »*«.

 

Nach ein wenig Herumprobieren mit den Klammern kam ich auf folgende Lösung:
Suche nach: <p class="p0 sgc-8">((\w+\s{0,})*)</p>
Ersetze durch: <p class="p6">>&nbsp;</p>
<p class="p0 sgc-8">\1</p>
<p class="p6">>&nbsp;</p>

 

Innerhalb dieses »p-Tags« suche ich also nach einem Wort »\w+« gefolgt von einem Leerzeichen »\s«, das entweder gar nicht oder beliebig oft vorkommt »{0,}«. Der gesamte Ausdruck steht innerhalb runder Klammern »()«.

Nun brauche ich natürlich noch den Multiplikator, das »*«. Setze ich es hinter die schließende Klammer, werden zwar alle Zeilen mit einem Wort korrekt ersetzt, bei mehreren Wörtern erscheint jedoch nur das jeweils letzte.

Daher habe ich den Ausdruck mit dem Multiplikator nochmals eingeklammert »()«.

 

Anschließend habe ich den regulären Ausdruck noch um ein paar Zeichen erweitert, weil auch die zuweilen vorkommen:
Suche nach: <p>((\w+:{0,}\s{0,}-{0,}\s{0,})*)</p>
Ersetze durch: <p class="p6">>&nbsp;</p>
<p class="p0 sgc-8">\1</p>
<p class="p6">>&nbsp;</p>

 

Eine weitere Kombination kann ebenfalls auftauchen. Ist das der Fall, kommt dieser Ausdruck zum Einsatz:
Suche nach: <p class="p0 sgc-8">((\w+:{0,}-{0,}\s{0,})*)([,]{1})((\s{0,}\w+:{0,}-{0,}\s{0,})*)</p>
Ersetze durch: <p class="p6">>&nbsp;</p>
<p class="p0 sgc-8">\1\3\4</p>
<p class="p6">>&nbsp;</p>

 

Grob geschätzt habe ich – einschließlich des Schreibens des Artikels – rund drei Stunden für diese ganze Sache gebraucht.

Für nur ein Buch hätte ich mir sicher nicht diese Mühe gemacht, doch ich muss noch so etliche bearbeiten. Wenn ich mir diese jetzt vornehme, habe ich die passenden Ausdrücke parat und spare viel Zeit.

Somit war diese »Denkarbeit« verbunden mit dem Herumprobieren ausgesprochen sinnvoll eingesetzte Zeit.

 


Artikel zum »später Lesen« markieren:

Bitte teilen, wenn Euch der Artikel gefällt.

Weitere interessante Artikel zum Thema: