首页 > 解决方案 > 使用正则表达式解析 Whatsapp 聊天日志

问题描述

我正在尝试使用正则表达式解析 WhatsApp 聊天日志。我有一个适用于大多数情况的解决方案,但我正在寻求改进它但不知道如何改进,因为我对正则表达式很陌生。

chat.txt文件如下所示:

[06.12.16, 16:46:19] Person One: Wow thats amazing
[06.12.16, 16:47:13] Person Two: Good morning and this goes over multiple
lines as it is a very long message
[06.12.16, 16:47:22] Person Two: ::

虽然到目前为止我的解决方案可以正确解析大多数这些消息,但是我有几百个消息以冒号开头的情况,就像上面的最后一个示例一样。这导致Person Two: :作为发送者的不想要的值。

这是我目前正在使用的正则表达式:

pattern = re.compile(r'\[(?P<date>\d{2}\.\d{2}\.\d{2}),\s(?P<time>\d{2}:\d{2}:\d{2})]\s(?P<sender>(?<=\s).*(?::\s*\w+)*(?=:)):\s(?P<message>(?:.+|\n+(?!\[\d{2}\.\d{2}\.\d{2}))+)')

任何有关如何解决此错误的建议将不胜感激!

标签: pythonregex

解决方案


在应用正则表达式之前,我会预处理列表以删除连续的冒号。所以对于每一行,例如

 line = [06.12.16, 16:47:22] Person Two: ::
 line = line.replace("::","")

这将给:

[06.12.16, 16:47:22] Person Two: 

然后,您可以在预处理数据上调用您的正则表达式函数。


推荐阅读