none
Regex String druch Unique Id ersetzen RRS feed

  • Frage

  • Grüss Euch alle...

    Ich habe zum Freitag noch ein kleines Problem zu lösen :-(

    Ich habe folgenden JSON String

        "DocumentDataList": [
            {
                "Id": "00000000-0000-0000-0000-000000000000",
                "_Id": "00000000-0000-0000-0000-000000000000",
                "NewId": "00000000-0000-0000-0000-000000000000",
                "AdditionalInformation": TEST,
                "DocumentTypeFull": "741",
                "DocumentReference": "TFT 2012 0460",
                "SysPersisted": false,
                "_SysPersisted": false
            },
            {
                "Id": "00000000-0000-0000-0000-000000000000",
                "_Id": "00000000-0000-0000-0000-000000000000",
                "NewId": "00000000-0000-0000-0000-000000000000",
                "AdditionalInformation": "TEST",
                "DocumentTypeFull": "WA",
                "DocumentReference": "IVL17/11",
                "SysPersisted": false,
                "_SysPersisted": false
            },
            {
                "Id": "00000000-0000-0000-0000-000000000000",
                "_Id": "00000000-0000-0000-0000-000000000000",
                "NewId": "00000000-0000-0000-0000-000000000000",
                "AdditionalInformation": "TEST",
                "DocumentTypeFull": "740",
                "DocumentReference": "724-1012-2685",
                "SysPersisted": false,
                "_SysPersisted": false
            }
        ],

    In diesem Block muss ich alle 'NewId' Elemente mit GUID's ersetzten die für den ganzen Block eindeutig sein müssen.

    Hat mir jemand eine Idee wie man das am besten löst ?

    Gruss
    Peter

    Freitag, 28. Februar 2014 13:36

Antworten

  • Hallo,die Zeilen mit den zu ersetztenden GUID's kannst du mit folgendem Ausdruck finden:

    (?<="NewId":\s*)"\d{8}-\d{4}-\d{4}-\d{4}-\d{12}"

    Da die Blöcke verschiedene GUID's benötigen, können wir die Regex.Replace-Methode nicht verwendne. Stattdessen müssen alle Funde manuell durch gegangen werden:

    'Content ist der JSON-String' 
    Dim sb As New StringBuilder
    Dim lastFound As Integer = 0
    For Each match As Match In Regex.Matches(content, "(?<=""NewId"":\s*)""\d{8}-\d{4}-\d{4}-\d{4}-\d{12}""")
        sb.Append(content.Substring(lastFound, match.Index - lastFound)) 'Alles zwischen dem letzten Fund und dem aktuellen'
        sb.Append("""" & Guid.NewGuid().ToString() & """") 'GUID hinzufügen'
        lastFound = match.Index + 38 'GUID ist mit "" 38 Zeichen lang'
    Next
    sb.Append(content.Substring(lastFound)) 'Alles zwischen dem letzten Fund und dem aktuellen'

    Durch Guid.NewGuid() wird eine neue, eindeutige GUID generiert.

    Du könntest anstelle des Regex aber auch nach "NewId" im String suchen und die dahinter stehende GUID ersetzen. Der Code verändert sich dadurch nur geringfügig.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 28. Februar 2014 14:23
    Moderator

Alle Antworten