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 для достижения этой цели?