如何实现正则表达式可选输入规则?时钟时间匹配问题求助
问题分析与解决
你的正则匹配失败的核心原因是小时部分的写法错误,导致无法匹配单数字小时(如2)的情况,同时分钟部分的正则也存在不合理的通配符使用。
原正则的问题
- 小时组
.[+0-9]错误:.是通配符,会匹配任意字符(而非仅数字),且这个表达式要求必须是两个字符(任意字符++/数字),但单数字小时(如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
相关产品推荐
相关产品推荐

