Извлечение 2 раза за строку в текстовом файле - PullRequest
0 голосов
/ 01 сентября 2009

У меня есть тестовый файл, который имеет много строк, каждая строка выглядит примерно так:

4:19 PM     5:15 PM  this is some text blah blah

Мне нужно регулярное выражение, которое потянет 2 раза и присвоит их переменной.

Так что в основном я собираюсь пройтись по текстовому файлу, извлекать информацию о времени из каждой строки и складывать разницу между ними.

Мне нужна помощь с регулярным выражением.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

Попробуйте это:

 ^([0-9][0-9]*:[0-9][0-9]* (AM|PM))(\t| )+([0-9][0-9]*:[0-9][0-9]* (AM|PM))

Данные в 1-м и 4-м матче.

1 голос
/ 01 сентября 2009

Использует слегка измененное регулярное выражение и добавляет разницу между датами, как вы упомянули:

string[] input = { "4:19 PM         5:15 PM  this is some text blah blah",
                   "3:00 PM         5:00 PM  text"
                 };

// build up pattern
string datePattern = @"(\d+:\d+\s(?:AM|PM))";
string pattern = String.Format("^{0}{1}{2}{3}$",
                               datePattern, @"\s+", datePattern, @"\s+.*");

TimeSpan total = new TimeSpan();
foreach (string text in input)
{
    var match = Regex.Match(text, pattern);
    if (match.Success)
    {
        // skip first group which has entire match
        DateTime dt1 = DateTime.Parse(match.Groups[1].Value);
        DateTime dt2 = DateTime.Parse(match.Groups[2].Value);
        TimeSpan diff = dt2 - dt1;
        total += diff;
    }
}
Console.WriteLine("Total difference: {0}", total);

Результат: Общая разница: 02: 56: 00


Если вы уверены, что ваши данные в правильном формате, вы можете сделать регулярное выражение очень простым, как указано ниже:

    string text = "4:19 PM         5:15 PM  this is some text blah blah";
    string pattern = @"(?<time>\d+:\d+)\s(?<period>AM|PM)";

foreach(Match m in Regex.Matches(text, pattern))
{
    Console.WriteLine("Time: {0} - Period: {1}",
        m.Groups["time"].Value,
        m.Groups["period"].Value
        );
}

Если вы не доверяете данным, вы, вероятно, захотите что-то более надежное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...