String Benutzerdefiniert Zerlegen und in Felder ausgeben

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von HenryV.

    String Benutzerdefiniert Zerlegen und in Felder ausgeben

    Hallo Zusammen, ich benötige mal einen kleinen Denkanstoß.

    Sachlage: Ich habe eine Zeichenkette und möchte Sie zerlegen. Bis zu einem gewissen Punkt, komme ich mit split, left ... und trennen nach Buchstaben und Zahlen gut Zurecht. Jedoch bekomme ich meine Sonderfälle nicht abgefangen, die ich für eine weitere Überprüfung der Teilstrings benötige.



    Beispiel: Zeichenkette besteht aus 3 Teilen, wie folgt definiert:

    1 Teil= Buchstaben und Zahlen bis max. 5 Zeichen gesamt

    2Teil= Zahlen im Bereich von 1 bi 99

    3Teil= 2 Möglichkeiten --> 1) Zahlen von 04 bis 96

    2) Sonderzeichen ( / ) und Zahlen von 400 bis 9999 , also gesamt 5 Zeichen --> /1500



    Zur besseren Orientierung trenne ich die Zeichenkette in den folgenden Beispiel zusätzlich durch ein _ damit es besser für das Verständnis bzw. die Logik ist. Das ist zugleich immer die richtige Lösung (Ergebnis dann halt ohne den _ )

    Bsp.1) AB_20_/500 --> gibt mir immer aus AB/_20_500

    Bsp.2) 8_20_100 --> gibt mir aus leer_82 _00



    Ich danke im Voraus für kreative Ideen.
    Dein Beispiel 2 kann ich mit deinen Definitionen nicht nachvollziehen.

    Nichts­des­to­trotz könnte man vielleicht etwas mit Regex machen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports System.Text.RegularExpressions
    3. Module Module1
    4. Sub Main()
    5. Dim str As New List(Of String)
    6. str.Add("AB20/500")
    7. str.Add("820100")
    8. str.Add("fght15/600")
    9. str.Add("8C201074")
    10. '[url]http://gamon.webfactional.com/regexnumericrangegenerator/[/url]
    11. 'Buchstaben und Zahlen -> 1-5 Zeichen
    12. Dim searchString1 As String = "^([\w]{1,5})"
    13. 'Zahlen im Bereich von 1 bis 99 -> 1-2 Zeichen
    14. Dim searchString2 As String = "([1-9][0-9]?)"
    15. 'Zahlen von 04 bis 96-> 2 Zeichen; ODER: / und Zahlen von 400 bis 9999 -> 4-5 Zeichen
    16. Dim searchString3 As String = "(0[4-9]|[1-8][0-9]|9[0-6]|\/?[4-8][0-9]{2}|\/?9[0-8][0-9]|\/?99[0-9]|\/?[1-8][0-9]{3}|\/?9[0-8][0-9]{2}|\/?99[0-8][0-9]|\/?999[0-9])$"
    17. Dim r As New Regex(searchString1 & searchString2 & searchString3)
    18. For Each s As String In str
    19. Dim matches As MatchCollection = r.Matches(s)
    20. If matches.Count = 0 Then Console.WriteLine("Keine Übereinstimmung für {0}", s)
    21. Dim mIdx As Integer = 0
    22. For Each m As Match In matches
    23. For groupIdx As Integer = 0 To m.Groups.Count - 1
    24. Console.WriteLine("[{0}][{1}] = {2}", mIdx, r.GetGroupNames(groupIdx), m.Groups(groupIdx).Value)
    25. Next
    26. mIdx = mIdx + 1
    27. Next
    28. Console.WriteLine()
    29. Next
    30. Console.ReadKey()
    31. End Sub
    32. End Module