Home > front end >  Regex between "\r\n"
Regex between "\r\n"

Time:12-27

I want to match \r\n1.11.1 Entrepreneurship und Unternehmer\r\n

blabla \r\n1.11.1 Entrepreneurship und Unternehmer\r\nEs 

I tried the following RegEx:

\\r\\n\d.\d\d.\d\s \w\\r\\n

What should it look like?

Link: https://regex101.com/r/QNXniB/1

CodePudding user response:

The pattern matches a single word character using \w but in the example data there are 1 or more word characters with spaces in between.

Note to escape the dot \. to match it literally.

\\r\\n\d\.\d\d\.\d\s \w (?:\s \w )*\\r\\n
                     ^^^^^^^^^^^^^^

See a .NET regex demo and a C# demo

If you want to match actual newlines in the text you should not double escape the \\r\\n

var tempAbsatz = "1. Entrepreneurship\r\nAus der Praxis\r\nAndrea  hat  Wirtschaftsingenieurwesen  studiert  und  ist  nun  seit  zwei  Jahren  in  der\r\nLogistik eines größeren mittelständischen Maschinenbauunternehmens tätig. Jörg ist\r\nBetriebswirt mit Schwerpunkt Steuern. Er arbeitet seit Abschluss seines Studiums vor\r\ndrei Jahren für eine große Wirtschaftsprüfungsgesellschaft. Mark, ein Wirtschaftsinfor-\r\nmatiker, führt seit gut zwei Jahren Beratungsprojekte für eine auf Digitalisierung spezia-\r\nlisierte Technologieagentur durch. Nathalie hat vor fünf Jahren das BWL-Studium mit\r\nSchwerpunkt Personal abgeschlossen. Sie leitet seit zwei Jahren die Personalentwick-\r\nlung eines mittelgroßen Elektronikunternehmens.\r\nDie  vier  lernten  sich  im  berufsbegleitenden  MBA-Studium  durch  eine  gemeinsame\r\nGruppenarbeit kennen. Ihre Aufgabe bestand darin, eine innovative Gründungsidee zu\r\nentwickeln. Bei den Vorbereitungen stellten sie fest, dass sie sich in der Verwendung\r\neiniger Begriffe nicht sicher sind. Mal sprechen sie von Unternehmern, mal von Selbst-\r\nständigen, manchmal auch von Entrepreneuren oder Existenzgründern. Antworten auf\r\ndie  Fragen,  welche  Rollen  Entrepreneure  einnehmen  und  warum  Entrepreneurship\r\nvolkswirtschaftlich so wichtig ist, haben sie auch nicht abrufbereit. Insofern wollen sie\r\nzuerst eine Begriffsklärung durchführen.\r\nHierfür recherchieren sie die folgenden Aspekte:\r\n•Was genau versteht man unter Entrepreneurship?\r\n•Lassen sich Unterschiede zwischen Entrepreneuren und Unternehmern finden?\r\n•Gibt es verschiedene unternehmerbezogene Entrepreneurship-Theorien?\r\n•Welche volkswirtschaftliche Signifikanz wird dem Entrepreneurship zugesprochen?\r\n1.11.1 Entrepreneurship und Unternehmer\r\nEs gibt keine allgemeingültige Definition für die Begriffe „Entrepreneur“ und „Entrepre-\r\nneurship“.  In  der  Literatur finden  sich  verschiedene  Ansätze  und  Zugänge  zum  Ver-\r\nständnis dessen, was unter einem Entrepreneur verstanden wird. Oft wird der innova-\r\ntive Charakter des Vorhabens zugrunde gelegt, manchmal auch von Inhabern kleiner\r\nund mittlerer Unternehmen, von selbstständig Tätigen oder von Unternehmensinha-\r\nbern (die auch Mitarbeiter beschäftigen) gesprochen. Eine Differenzierung erfolgt zum\r\nTeil zwischen Personen, die nur einmal gründen, und solchen, die häufiger Unterneh-\r\nmen aufbauen (Parker 2018, S. 6f.). Nachfolgend werden eine typische Begriffsverwen-\r\ndung und einige andere Ansätze skizziert.\r\n12Lektion 1\r\nwww.iubh.de\r\n\r\n";
var h = @"\r\n\d\.\d\d\.\d\s \w (?:\s \w )*\r\n";
foreach (Match mc in (new Regex(h)).Matches(tempAbsatz)) { 
    Console.WriteLine(mc.Value); 
}

Output

1.11.1 Entrepreneurship und Unternehmer

Looking at the text when there are actual newlines, you might also match the whole line that starts with a digit followed by 1 or more repetitions of a dot and digits:

^\d (?:\.\d )  .*

See a regex 101 demo

Note that in .NET \d can match digits in other languages as well.

CodePudding user response:

As there is a disparity between the titles format {index}. (ending with a . as in 1. Entrepreneurship) vs {index}.{subindex} (not ending with a . as in n1.11.1 Entrepreneurship und Unternehmer) we're going to need to check for both.

Check the results here.

The regex:

/(?:(?:\\r\\n)|^)(?<index>[0-9] \.(?:[0-9] \.?)*)(?<title>. ?)(?:(?:\\r\\n)|$)/gm

will match all headings starting with an index in the form <index>. 0 or more sub-indexes in the form <subindex>. or <subindex>.

You also need to handle the condition of the string start and end where we won't have a \r\n sequence. This is done through (?:(?:\\r\\n)|^) and (?:(?:\\r\\n)|$) respectively.

After you match with the given regex, you can access your index and title directly by the named groups index and title (title should be trimmed).

string text = "<your-text>";
Regex regex = new Regex("<regex>");

var match = regex.Match(text);

if (match.Success)
{
    var index = match.Groups["index"].Value;
    var title = match.Groups["title"].Value.Trim();
}
  • Related