Regex mittels Regex suchen (Problem: verschiedene Längen)
Hallo RegExperten,
ich habe ein Problem mit dem definieren einer Regex-Regel.
Ich habe eine Regex-Suchmaske (z.B. Test123[A4].C) und möchte eine
Liste durchsuchen (Ebenfalls Regex), welcher Satz zutreffend auf diese Regel ist.
Hauptproblem dabei ist dass die Länge variabel ist:
z.B. sollte gegebener Match zutreffen bei (Liste enthält durch Auflösung von eckigen oder runden Klammern zu kompletten Strings nur noch ggf.Punkte):
Test123
Test123A
Test123A.C
Test123ABC
jedoch nicht bei z.B.
Test123BC
Mein Ansatz bis jetzt:
1. Länge bis zum kürzesten *Prüfling* folgendermaßen definieren (noch easy und funktioniert, jedoch sicher verbesserungswürdig):
[T\.][e\.][s\.][t\.][1\.][2\.][3\.]
2. (Fortsetzung zu 1. Regex): (A oder Punkt(expilizit) oder Ende)
[A\.$][B\.$] => Findet weder Test123 noch Test123A, Match für Test123A. und Test123AB
3. (Fortsetzung zu 1. Regex): (A oder Punkt(expilizit) oder Ende) - Optional
[A\.$]?[B\.$]? => Findet jede Variante, jedoch auch die *falsche* Test123BC ...
Habt Ihr irgendeine Idee, wie ich dieses Problem lösen kann?
Vielen Dank!
ich habe ein Problem mit dem definieren einer Regex-Regel.
Ich habe eine Regex-Suchmaske (z.B. Test123[A4].C) und möchte eine
Liste durchsuchen (Ebenfalls Regex), welcher Satz zutreffend auf diese Regel ist.
Hauptproblem dabei ist dass die Länge variabel ist:
z.B. sollte gegebener Match zutreffen bei (Liste enthält durch Auflösung von eckigen oder runden Klammern zu kompletten Strings nur noch ggf.Punkte):
Test123
Test123A
Test123A.C
Test123ABC
jedoch nicht bei z.B.
Test123BC
Mein Ansatz bis jetzt:
1. Länge bis zum kürzesten *Prüfling* folgendermaßen definieren (noch easy und funktioniert, jedoch sicher verbesserungswürdig):
[T\.][e\.][s\.][t\.][1\.][2\.][3\.]
2. (Fortsetzung zu 1. Regex): (A oder Punkt(expilizit) oder Ende)
[A\.$][B\.$] => Findet weder Test123 noch Test123A, Match für Test123A. und Test123AB
3. (Fortsetzung zu 1. Regex): (A oder Punkt(expilizit) oder Ende) - Optional
[A\.$]?[B\.$]? => Findet jede Variante, jedoch auch die *falsche* Test123BC ...
Habt Ihr irgendeine Idee, wie ich dieses Problem lösen kann?
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 455481
Url: https://administrator.de/contentid/455481
Ausgedruckt am: 20.11.2024 um 00:11 Uhr
5 Kommentare
Neuester Kommentar
Kann ich nur zustimmen, für mich ebenfalls absolut unverständlich worauf der TO hier überhaupt hinaus will.
deshalb würde ich nach einer kürzeren und besseren Variante suchen.
Da die Liste aus Regex-Ausdrücken besteht musst du auch alle Varianten mit denen ein Buchstabe/Ziffer mit Regex dargestellt werden kann auflisten ob du das nun wie oben machst oder z.B. auf diese Weise^Test123($|ABC|A|\.BC|A\.C|AB\.)$
ist egal, wenn du über Regex suchst musst du das nun mal machen, denn es gibt ja auch \w etc die Buchstaben matchen, die wären also alle aufzulisten.
Ich würde das dann in dem Fall über eine Schleife realisieren die die Suchliste durchgeht und die Zeilen selbst über Regex auf das was das Ziel ist, anwenden und alle Positiven Matches in ein Array schreiben, damit entfällt das Auflisten aller Varianten.
Aber mit den Beispielen ist da noch immer etwas wirr. Mach doch mal anhand deiner konkreten RealLive-Aufgabe ein Beispiel, das viele "Test123" gibt einem keinen plastischen Eindruck von deiner realen Aufgabe.