ich versuche gerade, eine GREP-Nuss zu knacken, was mir aber nicht gelingen will.
Ausgangssituation: Ich habe einen String, bestehend aus ein fünf Sternen (*, **, ***, ****, *****), gefolgt von einem Leerzeichen.
Zwischen dem letzten Stern und dem Leerzeichen soll ein "Verschachteltes Format hier beenden" (?) (End Nested Style Here) eingefügt werden.
Das funktioniert mit folgendem GREP:
Mein GREP soll aber nicht "destruktiv" sein, d.h. er muss im Rahmen eines Scripts beliebig oft ablaufen können, ohne jedes Mal erneut das Zeichen "Verschachteltes Format hier beenden" einzufügen.
Das erreiche ich grundsätzlich mit folgendem GREP:
Dieser GREP "erwischt" aber immer die letzten zwei Sterne, nicht nur den letzten. Und wenn es nur einen einzigen Stern gibt, wird gar nichts gefunden…
--- Viele Grüße, Ralf --- iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)
Ich habe einen String, bestehend aus ein, zwei, drei, vier oder fünf Sternen
--- Viele Grüße, Ralf --- iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)
sorry, ich habe mich missverständlich ausgedrückt. Der String ist entweder *, **, ***, **** oder *****. Also immer nur eine der genannten Möglichkeiten.
Ein paar Beispiele im Klartext:
Hotel Blabla** Ort Hotel Blabla**** Ort
Da "Ort" (und das was darauf evtl. noch folgt) ein anderes Zeichenformat als der ganze Krempel davor haben muss, brauche ich das Zeichen "Verschachteltes Format endet hier".
--- Viele Grüße, Ralf --- iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)
Wenn du nach \*(?=\s) suchst und gegen *~h ersetzt, dann wird dieser Stern doch beim nächsten Mal nicht gefunden, weil zwischen ihm und dem \s ein ~h liegt, oder?
Ralf macht einen Katalog, darin gibt es Hotelbezeichnungen mit Hotelbewertungsangaben und der Angabe, wo die sind. Also: Hotel Blabla*** Kairo Hotel Traraa**** Assuan Hotel Umpa* München Hotel Alaaf** Köln
Die würde er gern per verschachteltem Format so formatieren: Hotel Blabla*** Kairo Hotel Traraa**** Assuan Hotel Umpa* München Hotel Alaaf** Köln
Dazu muss nach dem letzten Stern ein "End nested format here" eingefügt werden. Aber nur eins.
Wenn zwischen dem Stern und dem Leerzeichen bereits ein "End nested format here" eingefügt wurde, soll beim nächsten Suchvorgang nicht erneut ein "End nested format here" eingefügt werden.
Was ich weder bei Ralfs Frage, noch bei deiner Erklärung von heute morgen verstehe: wenn ich nach "Stern gefolgt von einem Leerzeichen" suche und dann dazwischen ein Nicht-Leerzeichen einfüge, dann werde ich diese Stelle beim nächsten Suchvorgang nicht finden. Das ist doch, was ich will, oder? Genauer: das ist doch, was Ralf will, oder?
Interessant: hast du deinen Vorschlag
ausprobiert? Ich bin noch nie auf die Idee gekommen, zwei Lookbehinds hintereinander zu schreiben und bin mir überhaupt nicht sicher, was da das definierte Verhalten ist...
offensichtlich habe ich trotz zweier Nachträge zu meinem Eingangsposting eine wesentliche Sache vergessen zu schreiben (Der Grund für meine "Dusseligkeit" steht am Ende dieses Postings):
Sowohl
als auch
finden auch den String *[End Nested Style Here][Leerzeichen]. Als wenn das "End Nested Style Here" auch von "\s" gefunden würde. Deshalb wollte ich es mit diesem GREP ausdrücklich von der Suche ausschließen:
Womit ich aber seltsamerweise nur 2 Sterne finden kann, nicht einen einzelnen. In der Praxis könnte ich damit im Augenblick leben, da ich nicht glaube, dass ein einzelner Stern überhaupt vorkommt (Wer bucht schon ein 1-Sterne-Hotel :-)). Aber grundsätzlich stellt es mich natürlich nicht zufrieden…
Quarz' GREP
den man auch so schreiben könnte:
ist jedoch ein echter Volltreffer!
Kompliment und vielen Dank! Ich werde mich später mal intensiv mit dem doppelten Lookbehind auseinandersetzen.
P.S.: Hier hat es gestern Abend und in der Nacht zum ersten Mal seit 10 Jahren geregnet. Dafür aber jetzt drei Gewitter mit Wolkenbrüchen in Folge… Dachziegel, Dachrinnen oder Bauisolierung existieren hier nicht. Ich brauche jetzt das Haus nicht mehr zu verlassen, um schwimmen zu gehen :-( Handtücher und Badelaken haben meinen Mac vor dem Schlimmsten bewahrt. Bevor ich den GREP auseinandernehme, muss ich jetzt erstmal bis zu 4 cm hoch stehendes Restwasser und Sandschlamm aus meiner Hütte entfernen… Damit ich meine Alu-Tastatur auch wieder ohne permanente Stromschläge verwenden kann.
--- Viele Grüße, Ralf --- iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)
Eine tolle Lösung, Kompliment! Offenbar ist es möglich, mehrere Lookbehinds (bzw. Lookaheads) zu kombinieren, was die Feinheit der Suche verbessern kann. Beispiel für 3 Lookaheads: Suchen nach: \*(?!~h)(?=\s)(?!\sAssuan) Ändern in: *~h
Also: Suche *, wenn nachher kein «Verschachteltes Format hier beenden» (~h) steht, sondern ein Leerzeichen (\s), aber kein Leerzeichen gefolgt vom Wort «Assuan».
Sehr praktisch zu wissen, vielen Dank.
Gruss, Marco
PS: Ralfs Aufgabe könnte man auch mit einer Textsuche (ohne Grep) erledigen: Suchen nach: *[LS] Ändern in: *^h[LS] [LS] = Leerschlag Anders als mit einem analogen Grep wird hier das Sonderzeichen auch bei wiederholter Änderung immer nur einmal gesetzt.
Vor lauter "GREP-Enthusiasmus" vergesse ich immer wieder, dass es in InDesign nach wie vor die gute alte Text-Suche gibt ;-)
Du hast natürlich vollkommen Recht und ich (wie auch Quarz und Gerald) hätte mir jede Menge Kopfzerbrechen sparen können…
--- Viele Grüße, Ralf --- iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)
Hallo, Marco! Ich weiß nicht, ob die Darstellung der Forenbeiträge nur bei mir "spinnt"? Anbei die Darstellung Deiner GREP-Ausdrücke als Screenshot. ***** Mit herzlichem Gruß, Uwe Laubender
Bei mir ist alles in Ordnung. Siehe Screenshot. Vielleicht mag HDS kein deutschsprachiges Mac OS :-) :-) :-)
--- Viele Grüße, Ralf --- iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)
Hallo. Frage mich bzw. Ralf (hoffe, Du bist wieder trocken ;) ) jetzt nur noch, warum Du hier überhaupt mit verschachteltem Format arbeiten musst. Fand im Thema keinen Hinweis für das Warum dieser Zielrichtung. Warum kein GREP-Stil? Nach dem Muster: Neuer Zeichenstil, vorausgesetzt, Sternchen-Leerschlag geht voraus. Grüße, Jochen
ich habe mit dem verschachtelten Format gearbeitet, weil ich die Geschichte vor ein paar Jahren noch in CS2 aufgebaut habe. Andere Dinge habe ich längst umgestellt auf GREP Styles, aber in diesem konkreten Fall nicht daran gedacht.
Dank deinem Hinweis habe ich auch diese Formatierung vor ein paar Minuten umgestellt auf GREP Style!
--- Viele Grüße, Ralf --- iMac i7 (18,3) 4,2 GHz, 32 GB 10.15.7 Catalina | MacBook Pro 15" (8,2) 2,0 GHz, 16 GB, 10.13.6 High Sierra | Mac Mini (6,1) als Server 2,5 GHz, 8 GB, 10.13.6 High Sierra | CC 2021 (ID 16.3.2)