Regex: leere Zeilen aus String entfernen

  • Allgemein

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von AliveDevil.

    Regex: leere Zeilen aus String entfernen

    Moin Leute

    Nachdem ich gestern gut beraten worden bin und mir RegEx angeschaut habe und auch begriffen habe (hoffe ich doch ;) ) wie es funktioniert habe ich eine Frage. Meine Text Datei wird eingelesen
    und auch wunderbar an den richtigen Stellen gesplittet. Da ich aber jetzt die gesplitteten Teile nun einzel bearbeiten möchte und vorher in zwei Typen unterteilen möchte. Habe ich folgendes Problem.
    Durch die Splittung die immer ne Zeile extra für sich beansprucht wird nachdem Splitten leer weiter gegeben und erst in der zweiten Zeile steht meine Information wodurch ich typisieren kann.
    Meine Frage daher wie müsste der Patter dafür aussehen damit ich leere Zeilen löschen/verändern kann das diese raus fallen?

    ich habe es mit

    VB.NET-Quellcode

    1. typbestimmung = Regex.Replace(typbestimmung, "^\n", "")

    Versucht aber ohne Erfolg die leere Zeile wird weiter mitgeführt.

    Würde mich über schnelle Hilfe freuen. Schon mal Danke im voraus.
    Das Problem ist das die Text Datei si aussieht und die weiter Formatierung bestehen bleiben soll.

    VB.NET-Quellcode

    1. %
    2. Neuer Fehler
    3. Zeitstempel
    4. weitere infos
    5. 23948472
    6. %
    7. id: ID:10.40.10
    8. Order 123402845
    9. 84339820205
    10. Fehlerinfo


    % Splittet den Text und führt die leere Zeile weiter mit, aber die Typbestimmung steht dann jeweils in der zweiten Zeile und kann unterschiedlich anfangen.
    Wie wäre es nicht alles als Ganzes einzulesen und an Zeilenumbrüchen zu splitten, sondern die Datei zeilenweise einzulesen?
    So in der Richtung:

    VB.NET-Quellcode

    1. Using Reader As New System.IO.StreamReader("Pfad", System.Text.Encoding.Default)
    2. Do Until Reader.EndOfStream
    3. Dim ThisLine As String = Reader.ReadLine
    4. If Not String.IsNullOrWhiteSpace(ThisLine) Then
    5. 'Hier bearbeiten
    6. End If
    7. Loop
    8. End Using

    Ansonsten würde es immer noch z.B.in einer For-Schleife möglich sein mit String.IsNullOrWhiteSpace (für FW 2.0 String.IsNullOrEmpty) zu überprüfen, ob die Zeile leer ist.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Das Problem ist das die Text Datei si aussieht und die weiter Formatierung bestehen bleiben soll.


    Bei deinem Beispiel sind in der 1. Zeile hinter dem % mehrere Leerzeichen. Also ist das keine Leerzeile.
    Wenn keine Leerzeile vorhanden ist, kannst du auch keine Leerzeile entfernen.


    Am Besten du hängst deine original Textdatei als Datei an und beschreibst noch mal genau, wie das Ergebnis aussehen soll.

    Übrigens: Um (richtige) Leerzeilen zu entfernen brauchst du kein Regex.
    Wenn Du von Leerzeilen redest, gehe ich mal davon aus, dass Du ein Array von Strings hast.
    Wenn Du nur einen String hast, können da irgenswie keine Leerzeilen drin sein.
    Wenn Du den einen String splittest nach Zeilenenden, kannst Du dem Split sagen, dass er die Leerzeilen rausnehmen soll:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim text = "ghzgzg" & Environment.NewLine & "kopkokok" & Environment.NewLine & Environment.NewLine & "kopkokok" & Environment.NewLine & Environment.NewLine & "kopkokok" & Environment.NewLine & "kopkokok" & Environment.NewLine & "kopkokok"
    3. Dim lines() As String = text.Split(New String() {Environment.NewLine}, System.StringSplitOptions.RemoveEmptyEntries)
    4. For Each line In lines
    5. Debug.Print(line)
    6. Next
    7. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!