正则表达式从字符串中提取时间信息

我正在从第三方设备接收数据。我需要提取两条信息。我想我需要使用正则表达式,但我对此一无所知。


您可以在下面找到一些示例字符串:


TN        12  1 17:45:19.90400  7173

TN         4  4 17:45:20.51800  7173

TN        13  1 17:45:24.03200  7173

TN         5  4 17:45:26.06300  7173

TN         6  4 17:45:29.28700  7173

TN        14  1 17:45:31.03200  7173

我需要从每个字符串中提取两条数据:


时间

时间之前的数字

所以我正在寻找的数据是这样的:


1 and 17:45:19.90400

4 and 17:45:20.51800

1 and 17:45:24.03200

4 and 17:45:26.06300

4 and 17:45:29.28700

1 and 17:45:31.03200

该数字将始终存在,并且始终为 1、2、3 或 4。时间也将采用相同的格式,但我不确定是否会有个位数的小时数。所以不知道9点会不会显示为


9 或 09


关于如何使用正则表达式提取它有什么建议吗?


慕沐林林
浏览 61回答 1
1回答

斯蒂芬大帝

我通常的方法是创建一个类来表示我们想要捕获的数据,并为其提供一个静态Parse方法,该方法接受输入字符串并返回填充有字符串中的数据的类的实例。然后我们可以循环遍历这些行并使用每行的数据填充自定义类的列表。例如:class TimeData{&nbsp; &nbsp; public TimeSpan Time { get; set; }&nbsp; &nbsp; public int Number { get; set; }&nbsp; &nbsp; public static TimeData Parse(string input)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var timeData = new TimeData();&nbsp; &nbsp; &nbsp; &nbsp; int number;&nbsp; &nbsp; &nbsp; &nbsp; TimeSpan time;&nbsp; &nbsp; &nbsp; &nbsp; if (string.IsNullOrWhiteSpace(input)) return timeData;&nbsp; &nbsp; &nbsp; &nbsp; var parts = input.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);&nbsp; &nbsp; &nbsp; &nbsp; if (parts.Length > 2 && int.TryParse(parts[2], out number))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timeData.Number = number;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (parts.Length > 3 && TimeSpan.TryParseExact(parts[3], "hh\\:mm\\:ss\\.fffff",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CultureInfo.CurrentCulture, out time))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timeData.Time = time;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return timeData;&nbsp; &nbsp; }}现在我们可以循环遍历字符串列表,调用Parse每一行,并最终得到一个新的对象列表,其中包含与每行Time关联的 和。Number另请注意,通过使用 aTimeSpan表示时间,我们现在拥有所有部分的属性,例如Hour、Minute、Seconds、Milliseconds、TotalMinutes等:var fileLines = new List<string>{&nbsp; &nbsp; "TN&nbsp; &nbsp; &nbsp; &nbsp; 12&nbsp; 1 17:45:19.90400&nbsp; 7173",&nbsp; &nbsp; "TN&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4&nbsp; 4 17:45:20.51800&nbsp; 7173",&nbsp; &nbsp; "TN&nbsp; &nbsp; &nbsp; &nbsp; 13&nbsp; 1 17:45:24.03200&nbsp; 7173",&nbsp; &nbsp; "TN&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5&nbsp; 4 17:45:26.06300&nbsp; 7173",&nbsp; &nbsp; "TN&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;6&nbsp; 4 17:45:29.28700&nbsp; 7173",&nbsp; &nbsp; "TN&nbsp; &nbsp; &nbsp; &nbsp; 14&nbsp; 1 17:45:31.03200&nbsp; 7173",};List<TimeData> allTimeData = fileLines.Select(TimeData.Parse).ToList();
打开App,查看更多内容
随时随地看视频慕课网APP