diff --git a/monitor.py b/monitor.py index 1557d86..31c8b4e 100644 --- a/monitor.py +++ b/monitor.py @@ -6714,11 +6714,23 @@ class MessageMonitor: 仅对【含冒号类分隔符的时间戳片段】做规整,绝不碰无冒号的纯数字串 (如兑换码 `1234 5678`、小数 `12.5`、版本号 `1.2.3`),避免误拼。 - 分隔符集合 `[::。.]` 不含 ASCII `.`:小数 `12.5` 不误判为时间; - ASCII 点分隔的时间(如 `16.28`)由调用处的 `[.;]→:` 兜底步骤处理。 + ⭐ Task #1666: 分隔符集合扩展为 `[::。.;.]`,支持 OCR 将冒号误识别为分号或点的情况。 + 例如 `9;51.24` → `9:51:24`,`16.28.40` → `16:28:40`。 + 注意:虽然 `.` 现在也被包含在分隔符集合中,但通常 OCR 输出的点分隔时间戳 + 是罕见的,主要是为了兼容 `9;51.24` 这类混合分隔符的情况。 """ if not text: return text + + # ⭐ Task #1666: 先处理分号/点作为分隔符的情况(精确匹配) + # 例如: 9;51.24 → 9:51:24, 16.28.40 → 16:28:40 + # 使用与第4092行相同的正则表达式,确保一致性 + text = re.sub( + r'(? 235959,非法(秒数超限) + raw_digits = ts.replace(':', '') + if raw_digits.isdigit() and int(raw_digits) > 235959: + return None if h > 23 or mi > 59 or s > 59: return None now = datetime.now() @@ -7389,9 +7408,15 @@ class MessageMonitor: ⭐ Task #1647: 陈旧消息过滤策略重构 - 用户要求:超过1小时的消息每条扣10分 - 选择消息时分数必须>0才能处理 + + ⭐ Task #1666: 先调用 _normalize_timestamps() 规整文本,再提取时间戳。 + 这样 OCR 将冒号误识别为分号或点的情况(如 9;51.24)也能被正确解析。 """ - # 从文本中提取时间戳 - timestamps = re.findall(r'\d{1,2}:\d{1,2}(?::\d{1,2})?', text) + # ⭐ Task #1666: 先规整文本,将分号/点等变体分隔符转换为冒号 + normalized_text = self._normalize_timestamps(text) + + # 从规整后的文本中提取时间戳 + timestamps = re.findall(r'\d{1,2}:\d{1,2}(?::\d{1,2})?', normalized_text) if not timestamps: # ⭐ Task #1661: 无时间戳返回特殊值-999.0,区分"无时间戳"与"有时间戳但较旧" # 调用方据此判断:无时间戳→不补分、视为陈旧消息