Regex - Groß- / Kleinschreibung


Lilye

Grünschnabel
Hallo zusammen,
bin noch relativ neu mit Regex, wäre super, wenn mir wer einen Tipp geben könnte.

Ich versuche in einem Text das Konjunktionswort "ehe" (oder verkürzt "eh") zu finden, aber nur dann, wenn es klein geschrieben ist, außer es steht am Satzanfang. Mit der Kleinschreibung möchte ich verhindern, dass er das Wort "Ehe" (im Sinn von Heirat) findet.

Code:
([,.:?!"“„>]\s\bEhe\b|(\beh\b|\behe\b))
Aber hier ist wohl ganz egal, ob ehe groß oder klein ist - ich bekomm einfach alle Ergebnisse. Mir ist aber nicht klar warum, weil ich \i (case-insensitive) gar nicht verwendet. Oder liegt das an \b?

Bsp. Suchtexte:
Ich hatte doch eh nur achtzehn Sätze. Und ehe ich mich versah, waren es zwanzig.
Vor zweihundert Jahren wurde die Liebe als Basis für eine Ehe noch als völlig absurd angesehen.
Ehe er sich alles zurückholt.


Mit dem oben genannten Regex finde ich auch die Ehe in der zweiten Zeile.

Ich hoffe, ich konnte mein Problem erklären.

Lg Lily
 

Lilye

Grünschnabel
Hallo ComFreek, danke für deine Antwort.

Ich benutze hier nur direkt die Suche über Notepad++ und habs auch testweise in der Entwicklungsumgebung von IntelliJ getestet. Aber eben nur als Regex Suche.
 

ComFreek

Mod | @comfreek
Moderator
Ich hab's gerade in Notepad++ getestet und war zuerst auch verwundet, warum es nicht klappt.
Wenn du dich in der Suchmaske in den Tabs "Suchen" und "Ersetzen" befindest, dann hebt Notepad++ auch "[für eine] Ehe [noch]" grün hervor, obwohl der RegEx dieses Wort nicht matcht. Wenn du allerdings manuell mit "Suche weiter" durchklickst und die echten Markierungen der Matches betrachtest, dann siehst du, dass dieses Vorkommnis von "Ehe" gar nicht gefunden wurde.
Dieses UI-Verhalten scheint mir ein Bug zu sein.

Eine deutlichere Ansicht der tatsächlichen Funde erhälst du im Tab "Hervorheben":
notepad++.PNG
 

ComFreek

Mod | @comfreek
Moderator
Ich hatte vergessen zu erwähnen, dass du noch die Checkbox "Groß-/Kleinschreibung beachten" aktivieren musst ;)
 

Lilye

Grünschnabel
Das hatte ich auch ausprobiert.
Aber dann bekomme ich nur mehr 2 Ergebnisse... das ist wirklich seltsam.

1530434134227.png
 

ComFreek

Mod | @comfreek
Moderator
Ah, ich hatte auch den ganzen Text in eine Zeile gepackt.
Gibt es eine Möglichkeit im Regex selbst Groß- und Kleinschreibung zu "erzwingen"?
Anscheinend nicht in Notepad++. Aber was ist überhaupt dein Anwendungsfall? Das klingt für mich stark danach, dass du das in einer Programmiersprache automatisieren möchtest anstatt manuell über eine UI zu gehen, die dafür nicht gedacht ist.
 

Lilye

Grünschnabel
Also im Hintergrund liegen ca. 500 Texte, die ich nach bestimmten Worten durchsuchen muss. Ich hab dafür einen Parser, der die Worte sucht - den allerdings eine Freundin für mich macht (in Java).
Damit ich meine Worte beliebig anpassen kann, arbeitet der Parser mit einem Inputfile, indem ich die Worte mit einem Regex-Ausdruck so ablege, wie ich es grade brauche. So kann ich dann selbst entscheiden, was der Parser suchen soll oder nicht.
Ich bereite nun gerade die Regex Ausdrücke vor.
in dem Parser kenn ich mich leider nicht aus...
 

ComFreek

Mod | @comfreek
Moderator
Ich würde empfehlen, den RegEx-Ausdruck gleich in der genutzten Programmierumgebung (also Java bei dir) zu erstellen und zu testen. Es gibt Unterschiede zwischen den RegEx-Engines unterschiedlicher Sprachen, z. B. auch, wie man die Option "case insensitive" angibt.
 

Lilye

Grünschnabel
Ja, ich hab direkt in der Entwicklungsumgebung auch schon die Suche getestet, komischerweise mit dem selben Ergebnis.
Aber ich werde warten, bis "mein Entwickler" :) wieder da ist - wenn ich eine Lösung finde, dann werde ich sie posten.

Danke jedenfalls fürs mitdenken!
 

ComFreek

Mod | @comfreek
Moderator
Ja, ich hab direkt in der Entwicklungsumgebung auch schon die Suche getestet, komischerweise mit dem selben Ergebnis.
Die RegEx-Funktionalität im Editor deiner Entwicklungsumgebung (= IDE = IntelliJ wohl bei dir) hat eigentlich gar nichts mit der RegEx-Implementierung der Sprache zu tun, für die dieser Editor ausgelegt ist. (Zwar ist IntelliJ zufälligerweise auch in Java geschrieben, aber darauf würde ich mich nicht verlassen.)
 

Lilye

Grünschnabel
Also Notepad tut was es will ;)

Aber es scheint nun mit (?-i) zu funktionieren:
Code:
(?-i)([.:?!"“„>]\s\bEhe\b|(\beh\b|\behe\b))
Damit lässt sich case-sensitiv erzwingen.