Hallo zusammen,
bisher konnte ich als stille Mitleserin all meine Probleme in diesem wirklich tollen Forum finden. Leider kam jetzt aber ein Problem auf, zudem ich keine Lösung finden konnte.
Ich arbeite seit einiger Zeit an einem Programm zur Auslesung von einem String innerhalb eines Strings. Es soll ein Benutzername aus einem Textblock ausgelesen werden, welcher noch andere Informationen beinhaltet. Ein Beispiel Benutzername wäre: "max.mustermann" (ohne Gänsefüßchen).
Es wird zunächst ein großer Textblock eingegeben, welcher nach jedem Zeilenumbruch gesplittet wird. Der gesplittete Textblock wird in einem (String) Array gespeichert. Bisher hatte ich das Ganze mit InStr gelöst (ich hänge meine bisherige Lösung hier gleich an). Jedoch würde ich gerne wissen, ob ich das Ganze auch per Where Klausel in Kombination mit Regex lösen kann. Dazu hatte ich bereits ein wenig daran gearbeitet, finde allerdings keine Lösung, wie ich nach dem Suchen (Where) des passenden Elements auch das Element bearbeiten und anhand des Regex Ausdrucks filtern kann (dann der Select Teil?). Die bisherige Lösung setzt leider die Zeichen vor und nach dem Benutzernamen als Eingabe voraus, welche allerdings nicht in jeder Eingabe vorhanden sind. Daher meine Frage, kann man das Programm auch einfach danach richten, dass es den Benutzernamen erkennt und ihn direkt rausfiltert?
Ich hab meine Kommentare mal mit dran gelassen. Hauptsächlich geht es mir um folgende Zeile
Mir ist bewusst, dass derzeit nur der String/Array Eintrag ausgegeben wird, in welchem der Reguläre Ausdruck greift. Was muss ich am Select verändern, dass auch wirklich nur der Benutzername herauskommt?
Meine bisherige Mustereingabe sieht folgendermaßen aus:
Und wenn ich das in den Code oben einfüge, kommt folgendes als Ausgabe heraus:
Ich bin gespannt ob jemand einen Ansatz für die Lösung hat und mir helfen kann.
Viele Grüße
Misao
bisher konnte ich als stille Mitleserin all meine Probleme in diesem wirklich tollen Forum finden. Leider kam jetzt aber ein Problem auf, zudem ich keine Lösung finden konnte.
Ich arbeite seit einiger Zeit an einem Programm zur Auslesung von einem String innerhalb eines Strings. Es soll ein Benutzername aus einem Textblock ausgelesen werden, welcher noch andere Informationen beinhaltet. Ein Beispiel Benutzername wäre: "max.mustermann" (ohne Gänsefüßchen).
Es wird zunächst ein großer Textblock eingegeben, welcher nach jedem Zeilenumbruch gesplittet wird. Der gesplittete Textblock wird in einem (String) Array gespeichert. Bisher hatte ich das Ganze mit InStr gelöst (ich hänge meine bisherige Lösung hier gleich an). Jedoch würde ich gerne wissen, ob ich das Ganze auch per Where Klausel in Kombination mit Regex lösen kann. Dazu hatte ich bereits ein wenig daran gearbeitet, finde allerdings keine Lösung, wie ich nach dem Suchen (Where) des passenden Elements auch das Element bearbeiten und anhand des Regex Ausdrucks filtern kann (dann der Select Teil?). Die bisherige Lösung setzt leider die Zeichen vor und nach dem Benutzernamen als Eingabe voraus, welche allerdings nicht in jeder Eingabe vorhanden sind. Daher meine Frage, kann man das Programm auch einfach danach richten, dass es den Benutzernamen erkennt und ihn direkt rausfiltert?
VB.NET-Quellcode
- Imports System.Text.RegularExpressions
- Public Class Form1
- Dim arrStrGesplittet As String()
- Dim strRegEx As String = "[a-z]+[.]{1}[a-z]+"
- Dim regExKriterium As Regex = New Regex(strRegEx)
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- arrStrGesplittet = stringSplitten(TextBox1.Text)
- TextBox2.Text = testFiltern(arrStrGesplittet)
- End Sub
- 'Folgendes noch als eigenes Modul machen!
- Function testFiltern(text As String()) As String
- 'Filtern des Strings für ein Element im Text, wo RegEx gilt, soll er das Element auswählen und in query speichern
- Dim query = From x In text Where (regExKriterium.IsMatch(x)) Select x
- 'String erstellen mit dem Stringbuilder (query ist kein String)
- Dim strBuild As New System.Text.StringBuilder()
- 'auslesen aller gefilterten Elemente der query und einpflegen in den Stringbuilder
- For Each y As String In query
- strBuild.AppendLine(y)
- Next
- MsgBox(strBuild.ToString())
- 'Muss aus irgendwelchen Gründen als String Convertiert werden
- Return strBuild.ToString()
- End Function
- Public Function stringSplitten(text As String) As String()
- Dim arrX = Split(text, vbNewLine)
- Return arrX
- End Function
- End Class
Ich hab meine Kommentare mal mit dran gelassen. Hauptsächlich geht es mir um folgende Zeile
Mir ist bewusst, dass derzeit nur der String/Array Eintrag ausgegeben wird, in welchem der Reguläre Ausdruck greift. Was muss ich am Select verändern, dass auch wirklich nur der Benutzername herauskommt?
Meine bisherige Mustereingabe sieht folgendermaßen aus:
Und wenn ich das in den Code oben einfüge, kommt folgendes als Ausgabe heraus:
Ich bin gespannt ob jemand einen Ansatz für die Lösung hat und mir helfen kann.
Viele Grüße
Misao