Laden...

Regex: Finde alles zwischen einem @ und einem Whitespace/Ende des Strings

Erstellt von PierreDole vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.213 Views
P
PierreDole Themenstarter:in
74 Beiträge seit 2017
vor 3 Jahren
Regex: Finde alles zwischen einem @ und einem Whitespace/Ende des Strings

Moin,
ich quäle mich gerade mit redex ab und brauche etwas Hilfe. 😃

Ich habe eine Liste mit Chat-Usern, bzw deren Namen. Wenn ich in das Input-Feld ein @ schreibe, poppt eine Liste mit den Namen auf. Mit [Tab] gibts dann die Autovervollständigung.

Nun versuche ich gerade alles hinterm @ und einem Space oder dem Ende des Strings auszulesen, um die Namensliste anzupassen.

Naja, ich krieg da immer einen leeren String raus. 😃


if(this.viewModel.ChatGlobalText != string.Empty)
                {
                    Regex rx = new Regex(@"\@(.*?)\s");

                    string startsWith = rx.Match(this.viewModel.ChatGlobalText + " ").Value;
                    this.UpdatePlayerNameList(startsWith);
                }

Ich setzte da ein "künstliches" Space hinter dem String, da es ansonsten kracht. Ich weiß nicht, wie man "oder das Ende des Strings" ausdrückt.

Hoffe, jemand kann mir helfen.

5.657 Beiträge seit 2006
vor 3 Jahren

Nun versuche ich gerade alles hinterm @ und einem Space oder dem Ende des Strings auszulesen, um die Namensliste anzupassen.

Dazu brauchst du kein RegEx, das kannst du alles mit den Methoden der String-Klasse erledigen: IndexOf, Substring, TrimEnd.

Weeks of programming can save you hours of planning

P
PierreDole Themenstarter:in
74 Beiträge seit 2017
vor 3 Jahren

Ja, fand das mit Redex etwas eleganter. 😃 Aber jetzt komme ich nicht drum herum es mit den String-Funktionen zu lösen. Mir ist aufgefallen, daß die Namen auch Space-Zeichen enthalten können. Somit muss ich alles von @ bis zur Cursor-Position auslesen.

Wie lese ich nun den Index des Cursors aus? Geht das überhaupt?

Und btw. der leere String lang an einem Fehler im ViewModel. Von daher, Redex war gar nicht so falsch, bis auf den fehlenden Ausdruck des Stringendes. Aber das nützt mir ja jetzt auch nichts mehr.

49.485 Beiträge seit 2005
vor 3 Jahren

Hallo MrSparkle,

Dazu brauchst du kein RegEx, das kannst du alles mit den Methoden der String-Klasse erledigen

es ist kein Argument, dass es auch anders geht. Meistens ist es mit Regex einfacher, verständlicher und sogar wartbarer, siehe z.B. Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch und folgende.

Hallo PierreDole,

klar kann man die Cursor-Position auslesen. Wie hängt davon ab, welche GUI-Technologie du einsetzt. Und damit ist es dann keine Frage für "Rund um die Programmierung" (was im Grunde schon die Eingangsfrage gilt, denn Regex steht explizit bei "Basistechnologien"), sondern für das entsprechende GUI-(Unter-)Forum. Davon abgesehen ist das eigentlich gar keine Frage fürs Forum, denn das bekommst du anhand der Doku leicht selbst raus.

herbivore

16.806 Beiträge seit 2008
vor 3 Jahren

es ist kein Argument, dass es auch anders geht. Meistens ist es mit Regex einfacher, verständlicher und sogar wartbarer

Hallo herbivore,

..und das ist eher eine persönliche Meinung statt eine sachliche Tatsache.
Meine persönliche Meinung ist, dass Regex immer - wenn möglich - vermieden werden sollte, weil es eben nicht einfacher, verständlicher und wartbarer ist.
In übrigen ist das eine sehr weit verbreitete Meinung zu Regex über viele Sprachen hinweg.

49.485 Beiträge seit 2005
vor 3 Jahren

Hallo Abt,

es ist mehr als eine persönliche Meinung, wie der verlinkte Thread zeigt. Da hat man den unmittelbaren Vergleich anhand eines üblichen, praktischen und konkreten Beispiels.

Und ich habe im übrigen nicht gesagt, dass Regex per se leicht wartbar ist, sondern nur wartbarer, als wenn man einen Pattern ausprogrammiert, was hier als Alternative vorgeschlagen wurde.

Wenn man Regex durch einen (fertigen/konfigurierbaren) Parser ersetzen kann, mag es anders z.B. aussehen.

Und auch das alles ist mehr als persönliche Meinung, sondern langjährige praktische Erfahrung mit Regex und den Alternativen. Trotzdem darf natürlich jeder auch einfach nur eine Meinung äußern.

Dass eine Meinung weit verbreitet ist, sagt übrigens auch nicht viel. Erst recht nicht, wenn die gegenteilige Meinung weiter verbreitet ist. 😃

herbivore