2015-11-13 74 views
1

使用rubular http://rubular.com/我试图从一种格式解析小时分秒4H40M20S解析与日期格式的正则表达式

到目前为止,我有这个

(\d*)H(\d*)M(\d*)S 

这对于4H40M20S但不能正常工作对于40M20S

在这种情况下,需要更改哪些内容才能使其工作?

+0

使用任选的基团:['?(?:(\ d *)H)(\ d *)M(\ d *)'](http://rubular.com/ R/6t5ZsjtHaA)。使用'(?:...)?',您可以使正则表达式的任何部分可选。 –

+1

你是对的卡西米尔我犯了一个错误,我已经编辑它来纠正这个错误! – Riina

回答

5

看起来像你喜欢的东西后:

([\d]+[HMS])+ 

Regular expression visualization

Debuggex Demo


如果你想seperately捕获每个部分,然后用:

([\d]+H)?([\d]+M)?([\d]+S) 

Regular expression visualization

Debuggex Demo

+0

而你如何提取这种模式的小时,分​​钟,秒值? –

+1

好点,我现在更新 –

+0

只有秒是强制性的?为什么不分钟或几小时?为了让你的模式更加健壮(所有组都是可选的),你可以在模式结尾处使用后视来检查你的组是否存在,如:'(?<= [0-9] [HMS])如果你有更好的主意,可以在任何地方或其他条件。 (你也可以在比赛结束后检查组是否存在) –