求匹配多格式时间范围字符串的正则表达式
匹配时间范围字符串的正则表达式解决方案
最终正则表达式
^\d+ min(?:s)? - (?:\d+ min(?:s)?|\d+ hour(?:s)?(?: \d+ min(?:s)?)?)$
正则规则拆解
^:锚定字符串起始位置,确保匹配从开头开始\d+:匹配1个及以上数字(时间的数值部分)min(?:s)?:匹配"min"或"mins",(?:s)?是非捕获可选组,处理单复数变化-:精准匹配时间范围中间的连接符(前后带空格)- 右侧匹配分支(满足任意一种即可):
\d+ min(?:s)?:匹配纯分钟格式(如20 mins)\d+ hour(?:s)?:匹配纯小时格式(如1 hour)\d+ hour(?:s)?(?: \d+ min(?:s)?)?:匹配"小时+分钟"格式,其中分钟部分为可选(如1 hour 30 mins)
$:锚定字符串结束位置,确保匹配到结尾
验证匹配
你给出的所有示例字符串都能被该正则成功匹配:
10 mins - 20 mins1 min - 10 mins10 mins - 1 hour10 mins - 1 hour 30 mins10 mins - 2 hours10 mins - 2 hours 30 mins
可选优化(若需数值范围校验)
如果需要限制分钟数为0-59,可以将匹配分钟的\d+替换为(?:[0-5]?\d),正则调整为:
^\d+ min(?:s)? - (?:(?:[0-5]?\d) min(?:s)?|\d+ hour(?:s)?(?: (?:[0-5]?\d) min(?:s)?)?)$
内容的提问来源于stack exchange,提问作者vietle
相关产品推荐
相关产品推荐

