gpt4 book ai didi

python - 在 python 中匹配来自 WhatsApp 日志的消息

转载 作者:行者123 更新时间:2023-12-01 08:36:36 25 4
gpt4 key购买 nike

我想提取与 WhatsApp 中的消息匹配的所有模式。这些消息具有以下形式:

一行消息:

[19.09.17, 19:54:48] Marc: If the mean is not in the thousands, there's the problem

多行长消息:

[19.09.17, 19:54:59] Joe: > mean(aging$Population)
[1] 1593.577
Is what I get as solution

我能够将其拆分为日期、时间、发件人和消息,但仅限于单行,方法是首先在文本文件中逐行读取,然后将这些行拆分为不同的分隔符。但是,这不适用于多行消息。现在我尝试使用正则表达式,通过它我能够获取日期和时间,但我仍然在努力将消息模式扩展到多行。

## reg expressions to match different things in the log
date = r'\[\d+\.\d+\.\d+,'
time = r'\d+\:\d+\:\d+]'
message = r':\s+.+\['
message = re.compile(message, re.DOTALL)

请注意,我的日志来自德国 WhatsApp,这就是日期有点不同的原因。另外,我以 , 和 ] 结尾,以确保我不会意外地从消息中获得匹配项。

我想对消息模式执行相同的操作,以 [ 结尾,这通常是下一行的开头(但如果可以在新行的消息中找到它,则可能不是很强大)。

可能有一种更简单的解决方案,但我(如您所见)对正则表达式非常糟糕。

最佳答案

这是使用 re.findall 的通用正则表达式和解决方案:

msg = "[19.09.17, 19:54:48] Marc: If the mean is not in the thousands, there's the problem
[19.09.17, 19:54:59] Joe: > mean(aging$Population)
[1] 1593.577\nIs what I get as solution"

results = re.findall(r"\[(\d{2}\.\d{2}\.\d{2}), (\d{2}:\d{2}:\d{2})\] ([^:]+): (.*?)(?=\[\d{2}\.\d{2}\.\d{2}, \d{2}:\d{2}:\d{2}\]|$)", msg, re.MULTILINE|re.DOTALL)

for item in results:
print "date: " + item[0]
print "time: " + item[1]
print "sender: " + item[2]
print "message: " + item[3]

date: 19.09.17
time: 19:54:48
sender: Marc
message: If the mean is not in the thousands, there's the problem
date: 19.09.17
time: 19:54:59
sender: Joe
message: > mean(aging$Population)

该模式看起来又长又臃肿,正好符合您预期的 WhatsApp 消息的结构。值得注意的是,该模式同时使用多线和 DOT ALL 模式。这对于可能跨越多行的消息是必需的。当该模式看到下一条消息的开始(特别是时间戳)或看到输入的结束时,该模式将停止使用给定的消息。

关于python - 在 python 中匹配来自 WhatsApp 日志的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com