我有富文本框,有很多行,每行有2个或更少的日期和时间,例如:
08/10/2015 09:16:27 | Starting the main loop
08/10/2015 09:19:58 | Weight
08/10/2015 10:01:28 | 08/10/2015 10:01:28 | Exception occurred: Timed out.
08/10/2015 11:13:02 | triggered
08/10/2015 11:14:08 | 08/10/2015 11:14:57 | Exception occurred: Timed out.
我想要做的是能够从每一行中提取日期和时间,并将它们存储到两个独立的数组中,一个用于日期,一个用于时间。
我设法做的是使用以下代码查找字符串中的日期总数。
Dim totalDates As MatchCollection = Regex.Matches("string to search here", "[0-9]*/[0-9]*/[0-9]{4}")
MessageBox.Show(totalDates.Count)
有没有办法从字符串中获取实际日期和时间?
谢谢
答案 0 :(得分:1)
如果每次都使用相同的格式,您可以使用以下内容:
For Each item As String In RichTextBox1.Lines
Dim split() = item.Split({" | "}, StringSplitOptions.RemoveEmptyEntries)
split = split.Take(split.Length - 1).ToArray()
For Each item2 As String In split
' Do your work here. Maybe you want to parse the dates?
Dim date1 As DateTime = DateTime.Parse(item2)
' Do something with your Date here...
Next
Next
这是.NET Fiddle的演示。
答案 1 :(得分:0)
您可以使用正则表达式提取日期,但我只推荐正则表达式作为最后的手段。 (在第一个答案中也避免了。)我的代码是旧式VB,第一篇文章是更现代的.Net风格。
这是我的通行证:
Dim s As String = "08/10/2015 09:16:27 | Starting the main loop" & vbCrLf
s &= " 08/10/2015 09:19:58 | Weight " & vbCrLf
s &= " 08/10/2015 10:01:28 | 08/10/2015 10:01:28 | Exception occurred: Timed out." & vbCrLf
s &= " 08/10/2015 11:13:02 | triggered" & vbCrLf
s &= " 08/10/2015 11:14:08 | 08/10/2015 11:14:57 | Exception occurred: Timed out." & vbCrLf
TextBox1.Text = s & vbNewLine
Dim a() As String = s.Split({vbCr, vbLf, "|"}, StringSplitOptions.RemoveEmptyEntries)
For Each s In a
If IsDate(s) Then
TextBox1.AppendText(CDate(s).ToShortDateString & " ::: " & CDate(s).ToShortTimeString & vbNewLine)
End If
Next
您还可以使用测试控件的.Lines()属性逐行处理。