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

C# 用于同时匹配HH:MM和HH:MM:SS时间格式的正则表达式,c#,regex,C#,Regex,我想写一个正则表达式来匹配HH:MM:SS和MM:SS。 匹配 99:43:22 1:43:22 01: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])) 我想添加的只是带有两次正则表达式的单个或(|)语法。 但它与HH:MM:SS不匹配 我错过了什么? 我已经看过这些文章: 交替运算符之前的表达式在可以测试交替运算符之后的表达式之前

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

  • 99:43:22
  • 1:43:22
  • 01: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]))
我想添加的只是带有两次正则表达式的单个或(|)语法。
但它与HH:MM:SS不匹配 我错过了什么? 我已经看过这些文章:


交替运算符之前的表达式在可以测试交替运算符之后的表达式之前匹配

如果锚定这些表达式的开始和结束,如下所示:

([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)

你的问题不清楚。无论我了解多少,我都建议使用以下正则表达式:

^([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之间

也许有一种更有效的方法,但我只能想到这一点

但它不起作用。这不是一个问题描述。什么不起作用?什么是不应该匹配的?或者,有什么不匹配的地方是它应该匹配的?或者它给你带来了什么错误?你得到了什么?你期望得到什么?你所有的例子都是HH:MM:SS,尽管不清楚你是否想要匹配第一个
99:43:22
。如果你的问题是你没有匹配
1:43:22
,请更改两边的顺序,或者使用
\d\d:\d?(?:\d\d?
,如果你的问题是你没有匹配
1:43:22
,请使用
,然后只需在OR中切换两个子匹配的顺序,它就可以工作了。