【发布时间】:2012-06-21 22:21:37
【问题描述】:
无论我尝试什么,它都与标志不匹配。我什至尝试使用字符串作为模式。这个函数应该能够接受像1 day -36mins + 2s -1s 这样的字符串并将其解析为TimeSpan 对象。有什么指点吗?
Public Function ParseTimeDelta(ByVal TimeDelta As String) As TimeSpan
Dim DayPattern As String = "\b([+-]?\w*\d+)\s*d(?:ay[s]?)?\b"
Dim HourPattern As String = "\b([+-]?\w*\d+)\s*h(?:(?:ou)?r[s]?)?\b"
Dim MinutePattern As String = "\b([+-]?\w*\d+)\s*m(?:in(?:ute)?[s]?)?\b"
Dim SecondPattern As String = "\b([+-]?\w*\d+)\s*s(?:ec(?:ond)?[s]?)?\b"
Dim Days As Integer = 0
Dim Hours As Integer = 0
Dim Minutes As Integer = 0
Dim Seconds As Integer = 0
Dim Regex As Text.RegularExpressions.Regex
Regex = New Text.RegularExpressions.Regex(DayPattern, Text.RegularExpressions.RegexOptions.IgnoreCase)
For Each Match As Text.RegularExpressions.Match In Regex.Matches(TimeDelta)
Days += CInt(Match.Groups(1).Value)
Next
Regex = New Text.RegularExpressions.Regex(HourPattern, Text.RegularExpressions.RegexOptions.IgnoreCase)
For Each Match As Text.RegularExpressions.Match In Regex.Matches(TimeDelta)
Hours += CInt(Match.Groups(1).Value)
Next
Regex = New Text.RegularExpressions.Regex(MinutePattern, Text.RegularExpressions.RegexOptions.IgnoreCase)
For Each Match As Text.RegularExpressions.Match In Regex.Matches(TimeDelta)
Minutes += CInt(Match.Groups(1).Value)
Next
Regex = New Text.RegularExpressions.Regex(SecondPattern, Text.RegularExpressions.RegexOptions.IgnoreCase)
For Each Match As Text.RegularExpressions.Match In Regex.Matches(TimeDelta)
Seconds += CInt(Match.Groups(1).Value)
Next
Return New TimeSpan(Days, Hours, Minutes, Seconds)
End Function
【问题讨论】:
-
你想匹配什么?
-
@KendallFrey,好吧,为了简单起见,我会给你几秒钟的有效匹配:
1s,1 sec,-23 seconds,1secs,- 10 second。 -
您应该在问题中包含这些内容,并稍微缩小问题范围。