まず第一に、そのために正規表現を使用することはお勧めしませんが、使用できるものを次に示します。
var data = @"2013-03-03 19:08:22 car 2001 Ford
2013-03-03 19:08:27 Truck 2012 Chevy
2013-03-03 19:08:44 car 2008 Honda
2013-03-03 19:08:55 car 2011 Ford
2013-03-03 19:09:21 car 2005 Nissan
2013-03-03 19:08:29 car 2003 Cadillac
2013-03-03 19:08:32 car 2009 Jeep
2013-03-03 19:08:52 car 2007 Suburban";
string regex =
@"(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})[^\n\r]+?Chevy.+?(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})[^\n\r]+?Ford";
var m = Regex.Match(data, regex, RegexOptions.Singleline);
Console.WriteLine("Chevy date: {0}", DateTime.Parse(m.Groups[1].Value));
Console.WriteLine("Ford date: {0}", DateTime.Parse(m.Groups[2].Value));
上記のコードは次のように表示されます。
Chevy date: 2013-03-03 19:08:27
Ford date: 2013-03-03 19:08:55
40 秒追加するだけです。AddSeconds(..)
のメソッドを使用して実行できますDateTime
。
編集:上記の正規表現の説明:
(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})
いくつかの DateTime に一致
[^\n\r]+?Chevy
同じ行で「Chevy」を一致させてみてください
.+?
テキストのチャンクに一致...
(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})
再びDateTimeと一致するまで...
[^\n\r]+?Ford
...同じ行に「フォード」があります
編集:正規表現を使用する必要のない別のアプローチを次に示します。
using (var reader = new StreamReader(@"C:\file-here.txt")) {
bool chevyFound = false;
while (!reader.EndOfStream) {
var line = reader.ReadLine().Trim();
if (chevyFound && line.EndsWith("Ford")) {
var fordDate = DateTime.Parse(line.Substring(0, 19));
Console.WriteLine("Ford Date: {0}", fordDate);
break;
}
if (line.EndsWith("Chevy")) {
var chevyDate = DateTime.Parse(line.Substring(0, 19));
Console.WriteLine("Chevy Date: {0}", chevyDate);
chevyFound = true;
}
}
}
おそらく、誰かが正規表現を使用する必要があると言ったとき、彼/彼女は DateTimes を解析するときのことを意味していました (実行する代わりにSubstring(0,19)
)。その場合、次のように置き換えることができます。
var chevyDate = DateTime.Parse(Regex.Match(line, "^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}").Value)