我有带时间戳记录值的文件。 我有一个特定的时间后读取一定的价值。
例如
文件
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
我想读雪佛兰一审的时间超过40秒添加到它比读取其福特在此时间之后出现。
So based upon the above log
First Chevy is at 19:08:27
Add 40 seconds 19:09:07
Now Read first Ford that shows up after 19:09:07 in this case that would be one at 19:08:55
我是新来的正则表达式不肯定知道怎么写。 谢谢
首先,我真的没有你使用正则表达式的暗示,但这里是一个你可以使用:
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})
匹配一些日期时间 -
[^\n\r]+?Chevy
尝试在同一行匹配“雪佛兰” -
.+?
匹配文本块... -
(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})
直到它的一些日期时间再次匹配... -
[^\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;
}
}
}
或许,当有人告诉你,你应该使用正则表达式时,他/她解析DateTime是否意味着时(而不是做Substring(0,19)
在这种情况下,您可以通过替换它:
var chevyDate = DateTime.Parse(Regex.Match(line, "^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}").Value)