Python使用Regex从邮件文本提取24小时制时间结果为空排查
24小时制时间正则提取错误修正
错误原因
- 正则首尾的
^和$是全局定位符,分别要求匹配内容从字符串开头开始、到字符串结尾结束,只有整个输入文本完全是时间格式时才会命中,而你的场景中时间是文本中间的片段,因此无法匹配到结果。 - 小时段的匹配规则存在漏洞:
[0-2][0-3]仅能匹配00-03、10-13、20-23区间的小时,漏掉了04-09、14-19这些合法小时值。
修正方案
调整正则规则:去掉首尾全局定位符,拆分小时匹配逻辑,覆盖所有合法24小时制区间:
import re # 示例输入 tp_msg = "Some text some text some text 12:00 Some text some text some text" # 修正后的正则:匹配00:00-23:59格式的时间 tp_time = re.findall(r'([01]?[0-9]|2[0-3]):[0-5][0-9]', tp_msg) print(tp_time)
运行后输出结果为:
['12:00']
如果需要避免误匹配到前后带其他数字的内容(例如112:34里的12:34),可以给正则加上单词边界:
tp_time = re.findall(r'\b([01]?[0-9]|2[0-3]):[0-5][0-9]\b', tp_msg)
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

