我正在与Regex挣扎。
这是一个示例时间戳:00:00:00.00
(小时,分钟,秒。十进制)。我还希望此值匹配00:0:0.00
请注意,租赁零在中心是可选的。
我使用的是:[1-60]:[1-60]:[1-60].[1-100]
,但这不需要前导零。我想帮助制作适用于上述两种情况的SINGLE正则表达式。
一个完整的解决方案会很棒,但如果你能指出我正确的方向,那也会有所帮助。
答案 0 :(得分:4)
您的解决方案实际上与您描述的不符;它只匹配每个位置的序列0123456
中的单个数字。你可能想要像
[0-5]?\d:[0-5]?\d:[0-5]?\d\.\d{1,2}
答案 1 :(得分:2)
您的模式还有许多其他问题。 [1-60]
是一个字符类。它将匹配单个1
,2
,3
,4
,5
,6
或0
字符。其次,模式中的.
与任何字符匹配,而不仅仅是文字.
。
我认为你正在寻找的是这样的事情:
\d{1,2}:\d{1,2}:\d{1,2}\.\d{1,2}
这将匹配任意一个或两个数字,后跟文字:
,后跟任意一个或两个数字,后跟文字:
,后跟任意一个或两个数字,后跟文字.
,后跟任意一位或两位数字。
或者只检查每个时间组件的特定范围匹配,您可以使用chrylis建议的模式,尽管我通常建议实际解析时间值,如果您确实需要这样做。
答案 2 :(得分:1)
你可以做的另一个选择:
(?:\d{1,2}:){2}\d{1,2}\.\d{1,2}
正则表达式:
(?: group, but do not capture (2 times):
\d{1,2} digits (0-9) (between 1 and 2 times)
: ':'
){2} end of grouping
\d{1,2} digits (0-9) (between 1 and 2 times)
\. '.'
\d{1,2} digits (0-9) (between 1 and 2 times)