我有一个包含许多行的测试文件,每行看起来像:
4:19 PM 5:15 PM this is some text blah blah
我需要一个可以拉2次并将它们分配给变量的正则表达式。
所以基本上我将循环浏览一个文本文件,并从每一行中提取时间信息,并将两者之间的差异加起来。
我需要有关正则表达式的帮助。
答案 0 :(得分:2)
试试这个:
^([0-9][0-9]*:[0-9][0-9]* (AM|PM))(\t| )+([0-9][0-9]*:[0-9][0-9]* (AM|PM))
数据在第1和第4场比赛中。
答案 1 :(得分:1)
这使用稍微调整的正则表达式,并添加日期之间的差异,如上所述:
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
);
}
如果您不信任这些数据,那么您可能需要更强大的功能。