You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现正则表达式可选输入规则?时钟时间匹配问题求助

问题分析与解决

你的正则匹配失败的核心原因是小时部分的写法错误,导致无法匹配单数字小时(如2)的情况,同时分钟部分的正则也存在不合理的通配符使用。

原正则的问题

  1. 小时组.[+0-9]错误:
    • .是通配符,会匹配任意字符(而非仅数字),且这个表达式要求必须是两个字符(任意字符++/数字),但单数字小时(如2)只有一个字符,自然无法匹配。
  2. 分钟组:.?[0-9]错误:
    • 同样使用了通配符.,可能匹配非数字字符,且写法冗余,不符合分钟的格式逻辑。

修正后的正则与代码

调整正则,让小时支持单/多数字(可选带+),分钟部分保持可选且仅匹配数字:

import re

x = '2 AM to 5 PM'
if data := re.search(r'([+]?\d+)(:\d{1,2})? (AM|PM) to ([+]?\d+)(:\d{1,2})? (AM|PM)', x):
    print(len(data.groups()))  # 输出6,代表成功匹配所有分组
else:
    print('False')

正则各部分说明

  • ([+]?\d+):匹配小时,[+]?允许可选的+号,\d+匹配一个或多个数字(支持单/多数字小时)。
  • (:\d{1,2})?:可选的分钟部分,:后匹配1-2位数字,整个部分通过?设为可选。
  • (AM|PM):匹配上午/下午标识。
  • 后半段重复前半段的时间格式,中间用to连接。

这个正则既可以匹配带分钟的格式(如12:54 AM to 23:34 PM),也能正确匹配无分钟的格式(如2 AM to 5 PM)。

内容的提问来源于stack exchange,提问作者Payam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:48:23