myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Regex: Finde alles zwischen einem @ und einem Whitespace/Ende des Strings
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 40


PierreDole ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
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.
28.07.2020 19:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.418
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
28.07.2020 20:13 Beiträge des Benutzers | zu Buddylist hinzufügen
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 40

Themenstarter Thema begonnen von PierreDole

PierreDole ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
28.07.2020 21:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.478
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
28.07.2020 22:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.013
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
30.07.2020 09:35 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.478
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
30.07.2020 13:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 09.08.2020 19:37