Regex verschachtelte Zeilenumbrüche finden

  • Sonstige

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von nogood.

    Regex verschachtelte Zeilenumbrüche finden

    Hallo,

    ich habe einen Csv-Inhalt wie folgt
    abc;def;"blub";ghi
    abc2;def2;"blub2";ghi2

    wobei blub und blub2 ihrerseits Zeilenumbrüche enthalten können, was mir gewaltig die Daten zerhaut.
    Ich finde mit Regex keine Möglichkeit alle Fälle abzudecken, um die problematischen Zeilenumbrüche zu ersetzen.
    Es müsste eigentlich sowas in der Art sein ;"(.*\n)+"; aber da gibt mir regex101 eine Fehlermeldung raus, catastrophic backtracking
    ;"(.*\n)"; findet nämlich alle Stellen wo nur ein Zeilenumbruch vorkommt.

    Viele Grüße

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Hi,

    RegEx ist hier auch nicht die Antwort. Was du brauchst ist ein CSV-Parser. Leider steht hier nirgends dabei, um welche Programmiersprache es sich handelt.
    Ein CSV-Parser liest dir die Daten schon sauber raus, ganz egal ob da Zeilenumbrüche mit drin sind oder nicht.

    PS: Zeilenumbrüche können übrigens nicht "verschachtelt" werden ;)

    @nogood aus einer CSV pauschal alle Zeilenumbrüche zu löschen, macht die Datei ja wirklich kaputt. Zeilenumbrüche sind für CSV Dateien schließlich Row separator. Der Plan ist ja, Zeilenumbrüche aus den Zellen zu ersetzen, und nicht, das CSV-Format komplett zu zerstören.


    Link :thumbup:
    Hello World

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Link“ ()

    Ah gut, das schau ich mir erstmal an.

    Ok das war jetz viel zu einfach damit ^^

    VB.NET-Quellcode

    1. Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(1252)
    2. Datensätze = New List(Of String())(7000)
    3. Using tfp As New FileIO.TextFieldParser(path, enc) With {.Delimiters = {";"}}
    4. While Not tfp.EndOfData
    5. Datensätze.Add(tfp.ReadFields)
    6. End While
    7. End Using


    Wie löst der TFP denn das Problem vermutlich?

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    @Link Ja ist klar. Ich meinte eher so was

    .txt:
    123;sdfsdf;123123;1231\n123;
    12312;123123;2345345;

    code:

    C#-Quellcode

    1. var lines = File.ReadAllLines("test.txt");
    2. foreach (var line in lines)
    3. {
    4. Console.WriteLine($"{line}\n");
    5. }
    6. Console.WriteLine("------");
    7. foreach (var line in lines)
    8. {
    9. Console.WriteLine($"{line.Replace(@"\n","")}\n");
    10. }


    Ausgabe Console (das eine /n ist raus):


    123;sdfsdf;123123;1231\n123;

    12312;123123;2345345;

    ------
    123;sdfsdf;123123;1231123;

    12312;123123;2345345;



    Deshalb die Bitte, um echte Daten.
    codewars.com Rank: 4 kyu