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

求助:编写可匹配多行换行消息的WhatsApp聊天日志Regex

解决WhatsApp聊天日志多行消息的正则匹配问题

我来帮你搞定这个多行消息匹配的难题!你的原正则无法处理换行消息的核心问题是:.*默认不会匹配换行符,而且没有明确界定消息的结束边界,导致遇到换行就停止匹配了。

原正则的问题点

你的原正则:

(?P<datetime>\d{2}\/\d{2}\/\d{4},\s\d(?:\d)?:\d{2} [pa].m.)\s-\s(?P<name>[^:]*):(?P<message>.*)

其中(?P<message>.*)只能匹配单行内容,因为.不包含换行符,一旦消息里有换行,后面的内容就会被漏掉。

修改后的正则方案

下面这个正则可以完美匹配多行消息,同时准确区分不同的聊天条目:

(?P<datetime>\d{2}\/\d{2}\/\d{4},\s\d{1,2}:\d{2} [ap].m.)\s-\s(?P<name>[^:]*):(?P<message>[\s\S]*?)(?=\s-\s\d{2}\/\d{2}\/\d{4},\s\d{1,2}:\d{2} [ap].m.|$)

关键修改说明

  • 把\d(?:\d)?简化成\d{1,2},写法更简洁,功能完全一致
  • 用[\s\S]*?替代.*:[\s\S]表示匹配任意空白或非空白字符(也就是所有字符,包括换行),*?是非贪婪匹配,避免把下一条聊天的内容也包含进来
  • 添加了正向预查(?=\s-\s\d{2}\/\d{2}\/\d{4},\s\d{1,2}:\d{2} [ap].m.|$):用来精准判断消息的结束位置——要么是下一条聊天的起始标记(日期+-),要么是整个日志的末尾

效果验证

比如对于这样的聊天内容:

05/10/2024, 3:45 p.m. - Dhiraj: Hey, check out this multi-line message!
It spans across
three different lines.
05/10/2024, 3:46 p.m. - Friend: Got it, that works perfectly now!

修改后的正则会正确捕获Dhiraj的完整多行消息,不会把Friend的内容混入其中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:06:21