Как сделать 'test2' необязательным элементом в следующем выражении C# RegEx, получив значение 'test1', правильно разобрался, когда элемент 'test2' отсутствует?Необязательный элемент в выражении соответствия C# RegEx
StringBuilder sb = new StringBuilder();
sb.AppendLine(" test1=123 any text in between ");
sb.AppendLine(" some ");
sb.AppendLine(" more ");
sb.AppendLine(" text in between ");
sb.AppendLine(" test2=456 ");
sb.AppendLine(" test1=789 some text .. test2=012 ");
Regex regex = new Regex(@"test1=(?<test1>(\d+))((.|\s)+?)(test2=(?<test2>(\d+)))");
MatchCollection matches = regex.Matches(sb.ToString());
foreach (Match match in matches)
{
Group test1 = match.Groups["test1"];
Group test2 = match.Groups["test2"];
System.Console.WriteLine("Test1 = {0}, Test2 = {1}", test1.Value, test2.Value);
}
спасибо.
@Oded - отвечаю я здесь, как я не могу комментировать отформатирован должным образом, и, как мой ответ больше, чем дозволено StackOverflow длина текста комментария:
Спасибо. Предлагаемый во втором ответе результат выражения RegEx приводит к следующему выводу:
Test1 = 123, Test2 =
Test1 = 789, Test2 =
Это не совсем правильно. И ваш первый ответ результат выражения RegEx в
Test1 = 123, Test2 = 456
Test1 = 789, Test2 = 012
тест выхода. Это правильно.
Но если я изменю
sb.AppendLine(" test1=789 some text .. test2=012 ");
в
sb.AppendLine(" test1=789 some text .. test52=012 ");
тогда выходной результат теста будет только одна линия
Test1 = 123, Test2 = 456
, и я хотел, чтобы это было
Test1 = 123, Test2 = 456
Test1 = 789, Test2 =
в этом случае.
спасибо. Пожалуйста, см. Мой комментарий выше. – ShamilS
Я использую (. | \ S), чтобы иметь любые символы, а также новую строку (символы) пропущен -. один, кажется, недостаточно хорош. – ShamilS
@ShamilS: Если вы хотите, чтобы класс '.' соответствовал символам новой строки, включите опцию« DOTALL »вашего регулярного выражения. (В Python это 're.DOTALL', в Perl это опция' s'. Посмотрите, что это такое на C#.) –