2 Вопрос: Почему не печатается последняя группа регулярных выражений в C # [duplicate]

вопрос создан в Wed, May 8, 2019 12:00 AM
    

На этот вопрос уже есть ответ здесь:

    

Я написал этот очень простой код регулярного выражения

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            string lines = "2019-05-07 11:50:28, INFO Ayush Singhania, Level 1, EID: 1001, UID: ayush.power, Message: Create a Job";
            Regex pattern = new Regex(@"(?<Date>.*?\s)(?<Time>.*?), INFO(?<Name>.*?),(?<Level>.*?), EID: (?<EID>.*?), UID: (?<UID>.*?), Message: (?<Message>.*?)");

            MatchCollection myMatchCollection = pattern.Matches(lines);
            foreach (Match myMatch in myMatchCollection)
            {
                var Date = myMatch.Groups["Date"].Value;
                var Time = myMatch.Groups["Time"].Value;
                var Name = myMatch.Groups["Name"].Value;
                var Level = myMatch.Groups["Level"].Value;
                var EID = myMatch.Groups["EID"].Value;
                var UID = myMatch.Groups["UID"].Value;
                var Message = myMatch.Groups["Message"].Value;

                Console.Out.WriteLine(Date);
                Console.Out.WriteLine(Time);
                Console.Out.WriteLine(Name);
                Console.Out.WriteLine(Level);
                Console.Out.WriteLine(EID);
                Console.Out.WriteLine(UID);
                Console.Out.WriteLine(Message);
            }
        }
    }
}

Вывод для следующего:

2019-05-07
11:50:28
Аюш Сингхания
Уровень 1
1001
ayush.power
........... (последняя строка пуста)

Все отлично работает Excel для последней группы - "Сообщение"
Он ничего не печатает. Кто-нибудь может подсказать, почему это так?
Также я думаю, что мой шаблон регулярных выражений правильный. Проверьте это здесь https://regex101.com/r/ysawNT/1

    
0
  1. Посмотрите на регулярное выражение для последней группы (MSG): .*? Знаете ли вы, что он на самом деле делает? (Узнайте /объясните, что делает точка ., изучите /объясните, что делает звездочка *, и узнайте /объясните, что там делает знак вопроса ?)
    2019-05-08 16: 30: 08Z
  2. Удалите ? из вашей группы MSG, так что теперь это: (?<MSG>.*) и вызовите MSG вместо Message при получении значения
    2019-05-08 16: 30: 24Z
  3. Ошибка MSG была ошибкой. Я редактировал оригинальный пост. Название заголовка не было проблемой. Это был последний ? в конце.
    2019-05-08 16: 37: 58Z
2 ответа                              2                         

Помимо использования неправильного сообщения Groups["Message"], которое должно быть MSG, последняя часть пуста, поскольку последняя часть не имеет установленного граничного значения, а не жадный .*? также удовлетворяет тому, что ничего не соответствует.

Что вы можете сделать, это сопоставить остальную часть строки, используя (?<MSG>.*)

Regex demo | C # demo

 введите описание изображения здесь

    
3
2019-05-08 16: 35: 06Z
  1. MSG была ошибкой, я скопировал ее и здесь. Я редактировал пост. Проблема была с ? в конце. Убрал это. Работал как шарм !! Благодаря
    2019-05-08 16: 39: 55Z

Ваша группа должна быть MSG

var Message = myMatch.Groups["MSG"].Value;
    
1
2019-05-08 16: 28: 24Z
источник размещен Вот