Frage von TheProblemChild, 20

Wie kann ich einen String in VB.net separieren?

Ich habe folgenden Code:

Dim Val1 as String Dim Val2 as String Dim Val3 as String Dim Info as String

Info = "Test Bla 92918 1"

Nun möchte jedoch alles vor "92918" in Val1 schieben, die "92918" in Val2 und alles nach "92918" in Val3. An Stelle von "92918" steht immer eine Zahl. Vor dieser Zahl stehen nur Buchstaben. Nach dieser Zahl stehen auch nur 1 - 200.

Nun dachte ich an eine Art.. Eh.. Hier ein Beispielcode: If Info.contains(eine Zahl) than alles vor der Zahl in Val1, die Zahl in Val2 und alles nach der Zahl in Val3. End if

Wie könnte ich sowas hinkriegen?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von xGlumi, 14

Zuerst: Bitte benutz demnächste Code Tags, damit man deinen Code gut sehen kann.

So, hier wäre ein Beispielcode für deinen Fall :)

        Dim Val1 As String = ""
Dim Val2 As String = ""
Dim Val3 As String = ""
Dim Info As String = "Test Bla 92918 1"

Dim rg As New Regex("\d\d\d\d\d")
Dim match As Match = rg.Match(Info)

If match.Success Then
Dim splitted() As String = Info.Split(New String() {match.ToString()}, StringSplitOptions.None)
Val1 = splitted(0)
Val2 = match.ToString()
Val3 = splitted(1)
End If

Stichwörter die du brauchst (Falls du das nochmal Nachschlagen willst):

  • String.Split
  • Regular Express

MFG xGlumi

Kommentar von TheProblemChild ,

Leider werden "Regex" und "Match" rot markiert, da diese nicht definiert sind.. Was soll ich in dem Fall machen?

Kommentar von xGlumi ,

Importieren ^^

Ganz oben hin:

Imports System.Text.RegularExpressions

MFG xGlumi

Kommentar von TheProblemChild ,

Du hast mir viel schneller geholfen, als es anderen wohl lieb wäre. Das ist einfach nur super. Ich werde später mehr über Regex lernen, das braucht man anscheinend viel öfters. Was Match angeht, das lerne ich auch noch. Nun hätte ich aber eine weitere Frage an dich.

Kann man alles nach dem String auch nur noch durch das letzte Leerzeichen trennen und nicht durch die Zahlenlänge? Also, das am Ende von Info, Val2 und Val3 nur durch das Leerzeichen getrennt werden? Die 5 Stellige Zahl kann auch mal 1 oder 999999 sein. Ansonsten ist alles WUNDERBAR. Ich hoffe, du verstehst es.

Kommentar von xGlumi ,

Du willst es also ganz einfach am Leerzeichen splitten? (Falls ich das richtig verstanden habe)

dim bla() as string = Info.Split(' ')
'bla(0) ist jetzt: Test
'bla(1) ist jetzt: Bla
'bla(2) ist jetzt: 92918
'bla(3) ist jetzt: 1

Problem hierbei ist leider, dass in deinem "Test Bla" auch ein Leerzeichen ist.

Also ist diese Methode glaube ich nicht so praktikabel.

MFG xGlumi

Kommentar von xGlumi ,

Ich würde dir mal folgenden Ausdruck ans Herz legen
(Nach einpaar mal rumtesten scheint es für mich in deinem Fall perfekt zu sein)

 \d{1,} 

Mit der Leertaste am Anfang und am Ende.

So sagst du ihm, dass du eine Zahl (min. 1 Ziffer) zwischen 2 Leertasten suchst.

MFG xGlumi

Kommentar von TheProblemChild ,

Wie genau müsste ich diesen Code jetzt einfügen? Könntest du das anhand deinem ersten Codetags nachbilden? Wäre super, da ich nicht so erfahren bin. Ich lerne diese Sprache grade.

Kommentar von xGlumi ,

Die Zeile:

Dim rg As New Regex("\d\d\d\d\d")

mit:

Dim rg As New Regex(" \d{1,} ")

ersetzen.

MFG xGlumi

Kommentar von TheProblemChild ,

Es funktioniert wunderbar. Ich danke dir vielmals!

Kommentar von MarkusGenervt ,

Das geht auch noch einfacher und allgemeiner:

Dim rg As New Regex("\b\d+\b")

Damit werden gleich die Leerzeichen raus genommen und dieser Ausdruck bleibt gültig, wenn kein weiteres Wort oder Zahl folgt.

Kommentar von xGlumi ,

@MarkusGenervt: In deinem Fall würde er zwar 1. die richtige Zahl erkennen aber auch zusätzlich die letzte Zahl als Match erkennen.

Antwort
von welt101, 15

https://msdn.microsoft.com/de-de/library/dd789093.aspx

Kommentar von TheProblemChild ,

Dort war ich schon unterwegs, jedoch habe ich mich hier dennoch gemeldet, um vielleicht ein genaues Beispiel mit meinem Code zu bekommen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten