使用正则表达式解析时间字符串并转换为整数



我想允许用户在屏蔽文本框中输入时间,然后验证该时间并在必要时进行转换以供以后保存。

我已经尝试了一种仅使用正则表达式验证时间的方法,但老实说找不到非常详细的答案。我决定简单地将用户输入的字符串分离到其基本组件中,然后将时间块转换为整数以便于比较。

'''

Public Function CreateTimeString(TheTime As String, TheSuffix As String) As String 'wip
Dim Hour As String = "00"
Dim Minute As String = "00"
Dim inthour As Integer
Dim intminute As Integer
Dim pattern As String = "(?<hour>d*?):(?<minute>d*?)"
For Each m As Match In Regex.Matches(TheTime, pattern)
Hour = m.Groups("hour").Value
Minute = m.Groups("minute").Value
Next
inthour = Convert.ToInt32(Hour)
intminute = Convert.ToInt32(Minute)
TxtMeals.Text = Hour & ":" & Minute
End Function

'''

尝试将分钟字符串转换为整数时出错。注释掉这一点并进行测试显示小时已成功转换。似乎找不到分钟。 示例字符串: 12:12 1:23 4:55 10:45 另外,如果我通过在最后一个引号之前添加一个空格来更改模式,则找不到,我想知道为什么。

找不到m.Groups("minute").Value,因为您在分钟部分使用非贪婪匹配d*?没有设置结束边界,例如$因此它至少会匹配,这将是 0 次。

您可以使用:

(?<hour>d+):(?<minute>d+)

您可以使用更精确的匹配,例如 12 小时时间使用:

(?<hour>1[0-2]|0?[1-9]):(?<minute>[0-5][0-9])

或 24 小时时间:

(?<hour>[01]?[0-9]|2[0-3]):(?<minute>[0-5][0-9])

可以选择使用锚点^$来断言字符串的开头和结尾。

正则表达式演示 | vb.net 演示

最新更新