Laden...

[gelöst] RegEx: eine Art 'exakte' Suche

Erstellt von Trekki1990 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.467 Views
Trekki1990 Themenstarter:in
503 Beiträge seit 2008
vor 6 Jahren
[gelöst] RegEx: eine Art 'exakte' Suche

Hallo liebe Gemeinde,

es ist gar nicht so leicht einen Titel für einen RegEx Thread zu finden 😉
Habe folgende Konstellation an Daten (AD-Gruppen):

DBG_Q-A - Abteilung ABCDEFGH DBG_Q-A-F - Abteilung ABCDEFGH DBG_Q-A-F1 - Abteilung ABCDEFGH DBG_Q-A-M - Abteilung ABCDEFGH U_Q-A U_Q-A-F U_Q-A-F1

Suchstring ist: Q-A-F
Pattern ist: (Q-A-F)\W|(Q-A-F)$
Herauskommen die Gruppen:

DBG_Q-A-F - Abteilung ABCDEFGH U_Q-A-F

Soweit so gut. Suche ich jetzt aber nach "Q-A" um diese Gruppen zu bekommen:

DBG_Q-A - Abteilung ABCDEFGH U_Q-A

Zeigt er mir ALLE die "Q-A" im Namen haben und nicht nur die zwei die ich eigentlich will.
Habe mit dem RegEx Tester von https://regex101.com/ schon ewig rumprobiert, aber komme zu keiner Lösung. Ist meine Anforderung überhaupt umzusetzen? Geht's vielleicht auch ohne RegEx?

Wäre für Denkanstöße dankbar.

PS: Ich prüfe immer nur einen Gruppennamen mit dem Pattern. Ich habe eine Liste aus Strings mit den ganzen AD-Gruppennamen. Iteriere die mit foreach durch und prüfe mit dem String ob die meinen Kriterien entspricht. Ist also nicht Multiline.

VG
trekki

D
261 Beiträge seit 2015
vor 6 Jahren

Würde dir ein

Q-A[^-]

weiterhelfen?

bzw.


Q-A-F[^-]
Q[^-]

2.078 Beiträge seit 2012
vor 6 Jahren

Sag doch einfach, dass nach dem Such-String " - " kommen soll.

(Q-A) - \w+|(Q-A)$

49.485 Beiträge seit 2005
vor 6 Jahren

Hallo dannoe, hallo Trekki1990,

Q-A[^-] verlangt, dass auf A auf jeden Fall noch ein Zeichen folgt (das kein Bindestrich ist). Das ist beim zweiten gewünschten Match nicht der Fall.

Gewünscht ist, dass hinter dem A kein Bindestrich steht (egal, ob überhaupt noch etwas danach steht oder eben nicht).

Und das geht mit Q-A(?!-) also einem negativen Lookahead auf einen Bindestrich.

Oder man gibt, wie Palladin007 vorschlägt, einfach (positiv) an was folgen soll.

herbivore

PS: Ich weiß nicht, ob man mit regex101.com on-the-fly testen kann; mit On-the-fly Regex-Tester: Regex-Lab geht das. Das vereinfacht das Testen deutlich.

PPS: Auch bei Regex gilt DRY. Also z.B. statt(Q-A) - \w+|(Q-A)$ besserQ-A( - \w+|$)
ggf. kombiniert mit RegexOptions.ExplicitCapture oderQ-A(?: - \w+|$)

Trekki1990 Themenstarter:in
503 Beiträge seit 2008
vor 6 Jahren

Danke für eure guten Tipps!
Konnte es jetzt zu meiner Zufriedenheit lösen.
Das Pattern sieht folgendermaßen aus:

(STRING) - |((U_|U_TEW-)STRING)$

VG
trekki