Hallo Leute,
ich brauche mal euere Hilfe bei Regex um mit Wildcards zu suchen. Ich versteh das nciht so ganz...
Ich hab einen Array, in dem verschiedene Materialnummer, wie 00199289A1, gespeichert sind. Der Benutzer soll die Möglichkeit haben mit Wildcards zu suchen, wie z. B. 00199* oder bloß 0019*
Mein bisherigen Lösungsversuche:
pattern = "\\d" + pattern.Replace("*", ".*");
oder
pattern = @"[0-9]{5}\d*[A][0-9]";
Kann mir einer weiterhelfen? Oder mir sagen, was ich falsch mache?
Ich bin zwar kein grosser Regex-Experte, aber es müsste eigentlich reichen wenn du den * durch .* austauscht.
Hallo Schnuki,
... und zwar musst du die Ersetzung in dem Pattern durchführen, den der Benutzer eingegeben hat. Sinnvollerweise kannst du diese einfache Ersetzung mit String.Replace durchführen. Selber einen Regex-Ausdruck schreiben brauchst du nicht.
herbivore
Hallo hebivore,
ich hab das jetzt so gemacht
mSuchen.Replace("[0-9a-Z]", "*")
aber es funktioniert trotzdem nicht... seufz
Hallo Schnuki,
irgendwie kommst du da mit den Ebenen durcheinander, gell?
Der Benutzer gibt doch 00199* ein und daraus willst du einen entsprechenden Regex-Pattern machen also 00199.*
mSuchen = mSuchen.Replace("*", ".*")
herbivore
Der Benutzer gibt doch 00199* ein und daraus willst du einen entsprechenden Regex-Pattern machen also 00199.*
also ich komm grad komplett durcheinander...
die materialnummer schauen wie folgt aus: 00199289A1
der Benutzer gibt dann 00199* ein und dann soll auch nur die nummer gefunden werden, die mit 00199 beginnt und momentan markiert er mir alle...
Also so wie ich das verstehe soll das Pattern ja die Benutzereingabe sein (die du dann natürlich an RegEx anpassen musst). Also halt so wie schon gesagt:
pattern = mSuchen.Raplace("*",".*");
mit dem Pattern kannst du dann per RegEx deine Einträge durchsuchen.
Vielen Dank, jetzt funktionierts...
ich hab die beiden parameter verwechselt und das hier geschrieben
pattern = mSuchen.Replace(".*", "*");
und somit hat er mir alle markiert!!!
Hallo Schnuki,
sinnvollerweise solltest du noch ein ^ davor setzen:
pattern = "^" + mSuchen.Replace(".*", "*");
herbivore
Wenn ein Benutzer 00199* eingibt, findet er aber auch alle Nummer, die mit 99900199* anfangen. Wenn du das vermeiden willst, kannst du prüfen, ob am Anfang ein Stern (oder in Regex ein Punkt) steht, wenn nicht fügst du am Anfang das ^-Zeichen ein.
Ein ^00199.* würde beispielsweise 99900199* nicht mit als Ergebnis liefern. Willst du das selbe fürs Ende haben musst du das $-zeichen am Ende anfügen.
Näheres findest du aber in [Artikel] Regex-Tutorial
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hallo @All,
Hab mich mit dem gleichen Thema und keiner Ahnung von RegEx rumgeschlagen. Hab dann meinen Kollgen ausgequetscht und bin zu folgender Umwandlung gekommen:
ab\91*4
^[a][b][\\][9][1].*[4]
Funktioniert bist jetzt 1A. Hab ich irgend was übersehen?
Gruß
Juy Juka
Hallo JuyJuka,
ab\91*4 würde ich in ^ab\91.*4 umsetzen. Die eckigen Klammern bringen gar nichts. [a] ist das gleiche wie nur a.
Bei der Umsetzung hilft Regex.Escape. Du musst anschließend nur * in *. umsetzen und ^ an den Anfang setzen.
herbivore