首先,我真的你不使用正則表達式的暗示,但這裏是一個你可以使用:
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秒。您可以使用DateTime
中的AddSeconds(..)
方法來完成此操作。
編輯:上述正則表達式解釋說:
(\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})
直到它再次匹配一些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;
}
}
}
或許,當有人告訴你應該使用正則表達式,他/她在分析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)
請用簡單的英語無法理解你的問題 – TalentTuner 2013-03-06 05:51:39
的StackOverflow是不是。安迪問解決辦法解釋。向我們展示您嘗試過的內容,並展示一些代碼示例。只有這樣人們纔會幫助你。否則機會是 - 你會得到低估。在旁邊注意 - 我不認爲在你的情況下使用正則表達式是明智的。 – 2013-03-06 06:19:17
這是功課嗎?如果不是,則正則表達式對於這種簡單的文件操作確實是過度的。 – 2013-03-06 06:19:54