C# Ungreedy Regex проглатывает перевод строки

Фон:
Match MyMatch1 = Regex.Match ("Line1 \ nLine2 \ n", "^. $", RegexOptions.Singleline); Match MyMatch2 = Regex.Match ("Line1 \ nLine2 \ n", "^.? $", RegexOptions.Singleline);

MyMatch1.Groups [0].Value.Length => "Line1 \ nLine2 \ n"
MyMatch2.Groups [0].Value.Length => "Line1 \ nLine2"

Почему не жадный вариант (.*?) удалить символ новой строки в конце строки?
Потому что мое регулярное выражение начинается с ^ и заканчивается $ не жадный вариант также должен принимать полную строку.

Проблема: как я прочитал здесь $ также находит \n,

string sStr1 = "Line1\nLine2\nOptionalLine\n";
string sStr2 = "Line1\nLine2\n";
string sRegex = "^(.*?)(OptionalLine\n)?$"; // <= I need non-greedy here
Match MyMatch3 = Regex.Match(sStr1, sRegex, RegexOptions.Singleline);  
Match MyMatch4 = Regex.Match(sStr2, sRegex, RegexOptions.Singleline);

MyMatch3.Groups [1].Value => 'Line1 \ nLine2 \ n'
MyMatch3.Groups [2].Value => 'OptionalLine3 \ n'

MyMatch4.Groups [1].Value => 'Line1 \ nLine2' <= Я хочу получить новую строку здесь!
MyMatch4.Groups [2].Value => ''

Что я могу сделать, чтобы получить новую строку, даже если отсутствует OptionalLine?
Как мне написать свой Regex для достижения этой цели?

0 ответов

Другие вопросы по тегам