用于匹配HH:MM和HH:MM:SS时间格式的正则表达式

时间:2018-05-22 17:23:38

标签: c# regex

我想写一个正则表达式来匹配HH:MM:SS和MM:SS。
匹配

  • 99:43:22
  • 1点43分22秒
  • 1点43分22秒
  • 1点43分22秒
  • 43:22

所以我试过

(([0-5]?[0-9]):([0-5]?[0-9]))|(([0-9]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9]))

我想要添加的只是一个带有两个时间正则表达式的OR(|)语法。
但它与HH:MM:SS不匹配 enter image description here 我错过了什么? 我已经查看了这些文章:

2 个答案:

答案 0 :(得分:2)

交替运算符之前的表达式在交替运算符之后的表达式之前匹配。

如果您锚定这些表达式的开头和结尾,请执行以下操作:

(^([0-5]?[0-9]):([0-5]?[0-9]))$|^(([0-9]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$)

......你应该得到你期望的行为。

如果你匹配一个较长的字符串,那么你可以先放一个最长的匹配:

((([0-9]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])|([0-5]?[0-9]):([0-5]?[0-9])))

或重写正则表达式,如下所示:

((\d{1,2}:)?[0-5]?\d:[0-5]?\d)

答案 1 :(得分:1)

你的问题不清楚。无论我理解什么,我都会建议以下正则表达式:

^([01]\d?|2[0-4]):[0-5]\d(:[0-5]\d)?$
  • 确保HH在00-24
  • 之间
  • 确保MM介于00-59
  • 之间
  • SS是可选的(因此它可以匹配HH:MM:SS和HH:MM),如果它是 在那里,它在00-59之间

可能有更有效的方法,但我只能想到这个!