Laden...

Aus Benutzereingabe mit Wildcards Regex-Pattern machen

Erstellt von Schnuki vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.294 Views
S
Schnuki Themenstarter:in
126 Beiträge seit 2007
vor 15 Jahren
Aus Benutzereingabe mit Wildcards Regex-Pattern machen

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?

M
334 Beiträge seit 2007
vor 15 Jahren

Ich bin zwar kein grosser Regex-Experte, aber es müsste eigentlich reichen wenn du den * durch .* austauscht.

49.485 Beiträge seit 2005
vor 15 Jahren

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

S
Schnuki Themenstarter:in
126 Beiträge seit 2007
vor 15 Jahren

Hallo hebivore,

ich hab das jetzt so gemacht


mSuchen.Replace("[0-9a-Z]", "*")

aber es funktioniert trotzdem nicht... seufz

49.485 Beiträge seit 2005
vor 15 Jahren

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

S
Schnuki Themenstarter:in
126 Beiträge seit 2007
vor 15 Jahren

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...

82 Beiträge seit 2009
vor 15 Jahren

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.

Diskordianer schwimmen nicht gegen den Strom - sie klettern aus dem Fluss! Ein Mathematiker ist ein Mensch, der einen ihm vorgetragenen Gedanken nicht nur sofort versteht, sondern auch weiß auf welchem Denkfehler er beruht
S
Schnuki Themenstarter:in
126 Beiträge seit 2007
vor 15 Jahren

Vielen Dank, jetzt funktionierts...

ich hab die beiden parameter verwechselt und das hier geschrieben


pattern = mSuchen.Replace(".*", "*");

und somit hat er mir alle markiert!!!

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Schnuki,

sinnvollerweise solltest du noch ein ^ davor setzen:

pattern = "^" + mSuchen.Replace(".*", "*");

herbivore

3.971 Beiträge seit 2006
vor 15 Jahren

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...

2.187 Beiträge seit 2005
vor 15 Jahren

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

49.485 Beiträge seit 2005
vor 15 Jahren

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