簡體   English   中英

使用正則表達式解析 Whatsapp 聊天日志

[英]Whatsapp chat log parsing with regex

我正在嘗試使用正則表達式解析 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: :的不必要的價值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}))+)')

任何有關如何解決此錯誤的建議將不勝感激!

在應用正則表達式之前,我會預處理列表以刪除連續的冒號。 所以對於每一行,例如

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

這會給:

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

然后,您可以對預處理過的數據調用正則表達式函數。

在構建分析 WhatsApp 聊天的工具時,我遇到了類似的問題。

主要問題是 chat.txt 的格式取決於您的系統語言。 在德語中你會得到這個16:47 ,但在英語中它可能是PM並且美國用戶的月份格式發生了變化......

我使用的有以下 4 個正則表達式。 到目前為止,它們涵蓋了所有發生的案例(拉丁語)。

過濾一般:

const regexParser = /^(?:\u200E|\u200F)*\[?(\d{1,4}[-/.] ?\d{1,4}[-/.] ?\d{1,4})[,.]? \D*?(\d{1,2}[.:]\d{1,2}(?:[.:]\d{1,2})?)(?: ([ap]\.? ?m\.?))?\]?(?: -|:)? (.+?): ([^]*)/i;

過濾系統消息:

const regexParserSystem = /^(?:\u200E|\u200F)*\[?(\d{1,4}[-/.] ?\d{1,4}[-/.] ?\d{1,4})[,.]? \D*?(\d{1,2}[.:]\d{1,2}(?:[.:]\d{1,2})?)(?: ([ap]\.? ?m\.?))?\]?(?: -|:)? ([^]+)/i;

日期:

const regexSplitDate = /[-/.] ?/;

處理在“< >”中傳遞的附件,即使您導出沒有附件的聊天也是如此。 (例如 <media ommitted>)

const regexAttachment = /<.+:(.+)>/;`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM