Home > Software design >  Regex Splitting with optionally second line
Regex Splitting with optionally second line

Time:09-29

I want to split the text above in three results. Every result starts with the word "Leistung" and can optionally have a second line starting with "Zusatz".

My regex-expression ist currently this:

/Leistung [ ]*[\w\d äöüÄÖÜ]*\n[\w\d äöüÄÖÜ\*]*/gm

But this does not fit exactly.

This ist the text:

Leistung             Armeotraining ET                                                         Anzahl 1
Zusatz               *TextZusatz_Anf1*
Leistung             Atemtherapie 30                                                          Anzahl 2
Leistung             Aktivierungsgruppe                                                       Anzahl 3
Zusatz               *TextZusatz_Anf3*

The result should be:

Leistung             Armeotraining ET                                                         Anzahl 1
Zusatz               *TextZusatz_Anf1*

Leistung             Atemtherapie 30                                                          Anzahl 2

Leistung             Aktivierungsgruppe                                                       Anzahl 3
Zusatz               *TextZusatz_Anf3*

Can anyone help me with the regex-expression? Thank you in advance!

Tobias

CodePudding user response:

You could try this:

/Leistung.*(?:\n(?!Leistung).*)?/gm

RegEx Demo

RegEx Explanation:

  • (?:\n(?!Leistung).*)?: only capture the second line if it does not start with Leistung

CodePudding user response:

You can split at newlines if the word Leistung is ahead:

\n(?=Leistung\b)

See this demo at regex101 - \b is a word boundary

Use \r?\n for crlf or \R if supported (eg PCRE/PHP).

  • Related