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
Würde dir ein
Q-A[^-]
weiterhelfen?
bzw.
Q-A-F[^-]
Q[^-]
Sag doch einfach, dass nach dem Such-String " - " kommen soll.
(Q-A) - \w+|(Q-A)$
Wer [...] kann, ist klar im Vorteil.
lock
Alternative fürasync
/await
: https://github.com/loop8ack/AsyncTicketLock
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+|$)
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