修复[OCR过滤]:版本号被误识别为时间戳导致消息丢弃

- 问题:OCR将版本号1.21.11识别后被正则表达式转换为时间戳1:21:11,
  该时间戳被判定为过期(>300s),导致包含版本号的用户新消息被过滤器1丢弃
- 根因:_normalize_timestamps和_ocr_text_has_fresh_timestamp中的正则表达式
  将点号分隔符[.]包含在分隔符集合中,错误匹配了版本号格式
- 修复:将第一个分隔符集合从[.;]改为[;:],排除点号作为首个分隔符
  版本号(如1.21.11)使用纯点号分隔,不再被转换为时间戳
  冒号/分号分隔的时间戳和混合分隔符(如9;51.24)仍正常转换
- 影响范围:_normalize_timestamps(第6982行)和_ocr_text_has_fresh_timestamp(第7068行)
  两处正则表达式同步修改
This commit is contained in:
youpaishidifu
2026-09-15 18:00:20 +08:00
parent 680f3e6a89
commit 83bfbff40a
+12 -4
View File
@@ -6977,10 +6977,14 @@ class MessageMonitor:
return text return text
# ⭐ Task #1666: 先处理分号/点作为分隔符的情况(精确匹配) # ⭐ Task #1666: 先处理分号/点作为分隔符的情况(精确匹配)
# 例如: 9;51.24 → 9:51:24, 16.28.40 → 16:28:40 # 例如: 9;51.24 → 9:51:24, 16.28.40 → 16:28.40
# 使用与第4092行相同的正则表达式,确保一致性 # ⭐ Task #1716: 排除版本号误识别(如1.21.11被误转为时间戳1:21:11)
# 版本号通常用点号分隔(如1.21.11、v1.0.3),时间戳用冒号/分号分隔
# 修改正则表达式:要求第一个分隔符不能是点号(排除版本号格式)
# 防止版本号被错误转换为时间戳导致消息丢弃
# 修改说明:将第一个分隔符[.;]改为[;:],排除点号作为第一个分隔符
text = re.sub( text = re.sub(
r'(?<![;.0-9A-Za-z%])(\d{1,2})([.;])(\d{2})(?:[.;:](\d{2}))?(?![;.0-9A-Za-z%])', r'(?<![;.0-9A-Za-z%])(\d{1,2})([;:])(\d{2})(?:[.;:](\d{2}))?(?![;.0-9A-Za-z%])',
lambda m: f'{m.group(1)}:{m.group(3)}:{m.group(4)}' if m.group(4) else f'{m.group(1)}:{m.group(3)}', lambda m: f'{m.group(1)}:{m.group(3)}:{m.group(4)}' if m.group(4) else f'{m.group(1)}:{m.group(3)}',
text) text)
@@ -7065,8 +7069,12 @@ class MessageMonitor:
# ')youpaishidifu 服务器的基本信息有哪些?'被过滤器1丢弃。 # ')youpaishidifu 服务器的基本信息有哪些?'被过滤器1丢弃。
# 第二段放宽为任意[.;:],与stage splitting的_line_has_fresh_ts # 第二段放宽为任意[.;:],与stage splitting的_line_has_fresh_ts
# (\d{1,2}[:;.]\d{1,2}(?:[:;.]\d{1,2})?)对齐;URL残片防护靠前后顾不变。 # (\d{1,2}[:;.]\d{1,2}(?:[:;.]\d{1,2})?)对齐;URL残片防护靠前后顾不变。
# ⭐ Task #1716: 排除版本号误识别(如1.21.11被误转为时间戳1:21:11)
# 版本号通常用点号分隔(如1.21.11、v1.0.3),时间戳用冒号/分号分隔
# 修改正则表达式:要求第一个分隔符不能是点号(排除版本号格式)
# 防止版本号被错误转换为时间戳导致消息丢弃
normalized = re.sub( normalized = re.sub(
r'(?<![;.0-9A-Za-z%])(\d{1,2})([.;])(\d{2})(?:[.;:](\d{2}))?(?![;.0-9A-Za-z%])', r'(?<![;.0-9A-Za-z%])(\d{1,2})([;:])(\d{2})(?:[.;:](\d{2}))?(?![;.0-9A-Za-z%])',
lambda m: f'{m.group(1)}:{m.group(3)}:{m.group(4)}' if m.group(4) else f'{m.group(1)}:{m.group(3)}', lambda m: f'{m.group(1)}:{m.group(3)}:{m.group(4)}' if m.group(4) else f'{m.group(1)}:{m.group(3)}',
normalized) normalized)
timestamps = re.findall(r'\d{1,2}:\d{1,2}(?::\d{1,2})?', normalized) timestamps = re.findall(r'\d{1,2}:\d{1,2}(?::\d{1,2})?', normalized)