InDesign-Tipp: GREP-Stil nach Doppelpunkt

Teil meiner Aufgabe, InDesign-Templates für den Heise-Verlag zu erstellen, ist auch, durch den schlauen Einsatz von GREP und anderen Helferlein die Arbeit für die Layouter so einfach wie möglich zu machen. Eine Anforderung war: »Da kommt Text, dann ein Doppelpunkt, danach ein Link. Der Link soll andersfarbig sein«. Das ist einfach über ein verschachteltes Format zu lösen.

Doch dann wurde es komplizierter: Es können im Text vor dem Doppelpunkt weitere Doppelpunkte sein. Also sucht man nach einem Link, der hinter dem letzten Doppelpunkt in einem Absatz steht. Da hilft ein verschachteltes Format nicht weiter, hier muss ein GREP-Stil benutzt werden. Sieht kryptisch aus, erfüllt aber seinen Zweck:

(?<=: )[\l\u\d]+\..+

Übersetzt steht dort: Suche hinter einem Doppelpunkt und einem Leerzeichen einen oder mehrere Großbuchstaben, Kleinbuchstaben oder Ziffern, gefolgt von einem Punkt und danach weiteren Zeichen aller Art – was der Systematik eines Links (ohne https://www davor) entspricht. In der Abbildung ist das die erste Zeile mit dem Beispiel A:

Damit war die Aufgabe erledigt, aber ich dachte mir: Was ist, wenn im Text vor dem letzten Doppelpunkt auch ein Link hinter einem Doppelpunkt vorkommt? Beispiel B zeigt, dass dann mein Ansatz nicht funktioniert. Und: Warum nur für Links hinter dem letzten Doppelpunkt eines Absatzes und nicht für jeglichen Text? Gefragt, getan:

(?<=: )[^:]+(?=$)

Das sucht nun nach (fast) allem, was kein Doppelpunkt ist, und zwar hinter einem Doppelpunkt und einem Leerzeichen und vor dem Absatzende. Wie zu sehen bei Beispiel C.

Mir fällt keine Lösung ein, bei der im Text nach dem Doppelpunkt auch noch ein Doppelpunkt sein darf und es trotzdem automatisch formatiert würde. Ich freue mich aber natürlich über entsprechende Hinweise und Ideen!


Vielen Dank an den Heise-Verlag für die ursprüngliche Ausgangsfrage und Heike Burch, die mich immer wieder mit so tollen Knobelaufgaben versorgt!


Update 8. Juni 2020: Mein Kollege Simon Wehr wurde von meinen GREP-Spielereien angefixt und hat damit ein bisschen weiter rumgespielt:

(?<=: )[\l\u\d\-]+\.[^\h]+

Das findet nach der bekannten Kombination aus Doppelpunkt und Leerzeichen einen Link bis zu einem Leerzeichen. Steht hinter dem Link weiterer Text, ist der wieder normal formatiert. Aber es findet jeden solchen Link, nicht nur den letzten. Also muss noch die Suche nach dem Absatzende eingefügt werden:

(?<=: )([\l\u\d\-]+\.[^\h]+)(?=$)

Das findet also einen Link nach Doppelpunkt und Leerzeichen am Absatzende – mit der Einschränkung, dass man nicht aus Versehen ein Leerzeichen am Ende des Absatzes haben darf.

Vielen Dank, Simon! Aber auch diese Einschränkung kann man natürlich weggreppen:

(?<=: )([\l\u\d\-]+\.[^\h]+)(?=\s*$)

Damit wird nicht nur das Absatzende $ gesucht, sondern ein Absatzende mit keinem oder beliebig vielen Leerzeichen aller Art davor.