Die Aufgabenstellung war, Zeilen zu finden, die eine geöffnete Klammer enthalten, aber danach keine schliessende.
Die Lösung:
(?m)^.*?\([^\)]*?$
Erklärung
- (?m) bewirkt, dass über das Zeilenende hinaus gesucht wird
- ^ Zeilenanfang
- .*? eine beliebige Zeichengruppe, aber durch das Fragezeichen non greedy
- \( die geöffnete Klammer (muss mit \ escaped werden)
- ([^\)]*?$ bis zum Zeilenende $ darf jedes beliebige Zeichen beliebig oft vorkommen *? ausser die geschlossene Klammer [^\)]
Im folgenden Text erfüllt die Zeile „Was (ist ) mit so was(?“ als erstes die Bedingung.
Hallo
Das hier ist eine Zeile die (303) enthält
Was (ist ) mit so was(?
und hier) geht es (noch weiter
Der hier nicht)
der (
Der angegebene Regex-Ausdruck findet allerdings nur die erste Zeile, die diese Bedingung erfüllt.
Quellen:
- https://ragnar-f.github.io/docs/misc/RegEx-QuickRef.htm
- mein Artikel zu Grails / Groovy enthält einen längeren Abschnitt zu Regex
Apostroph ersetzen mit Notepad++
Und gleich noch eine Knacknuss: Für einen Datenimport musste ich die Apostroph verdoppeln, aber natürlich nur jene, die nicht bereits doppelt daherkamen.
Die Daten sahen ungefähr so aus:
„9659“,“1718″,“Gewinde-Adapter 45′ Bogen“,“06MUX06MU45″,““,“1″,“Stk.“,“52″
„9660“,“1718″,“Gewinde-Adapter 37““,“06NUX06MT“,““,“1″,“Stk.“,“9.7″
Als Tool dafür habe ich Notepad++ in der Version 6 gewählt.
Die Aufgabe lässt sich mit folgenden Regex-Ausdrücken lösen
Suche: ([^‘])'([^‘])
Ersetzen: \1“\2
Gesucht werden alle Apostroph, die weder vorn noch hinten ein weiteres Apostroph haben. Mit den Klammern werden zwei Gruppen erzeugt, auf die dann beim Ersetzen wieder Bezug genommen wird.