Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Regex: Finde alles zwischen einem @ und einem Whitespace/Ende des Strings
PierreDole
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Themenstarter:

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

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5988
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat von PierreDole
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
private Nachricht | Beiträge des Benutzers
PierreDole
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo MrSparkle,
Zitat
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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16146

beantworten | zitieren | melden

Zitat von herbivore
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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers