我在探索导出的 WhatsApp 聊天数据集时遇到了正则表达式障碍
Posted
技术标签:
【中文标题】我在探索导出的 WhatsApp 聊天数据集时遇到了正则表达式障碍【英文标题】:I hit a regex roadblock while exploring a dataset of exported WhatsApp chats 【发布时间】:2021-08-20 22:36:08 【问题描述】:我正在创建导出的 WhatsApp 聊天数据集。为了操作数据,我需要将聊天记录的每一行拆分为date
、time
、sender
和message
(列)。
import pandas as pd
import re
column_names = ["date", "time", "sender", "message"]
data = pd.read_table("datasets/WhatsApp Chat with Makay.txt", sep="re.split(', |- |:', data2)", names = column_names)
data.head()
输出:整行/字符串进入日期列,而时间,发件人 和消息都返回 NaN 值。
这正是字符串的一个示例:
string: '04/10/2020, 12:34 - Sender: Alright. This is the "message", with multiple de-limiters.'
预期输出:['04/10/2020', '12:34', 'Sender', '好吧。这是 “消息”,带有多个分隔符。']
我尝试了以下模式:
re.split(', |-|:', string)
re.split('\d\d[- /.]\d\d[- /.]\d\d\d\d[- /.] *?|, *?|- *?|: ', string)
re.split('\d\d[- ./]\d\d[- ./]\d\d\d\d[- ./]|, |- |: ', string)
但他们都失败了。其他类似标记的问题似乎没有回答这个特定的问题。我还访问了 regex101 网络应用程序,但找不到解决方案。有什么帮助吗?
【问题讨论】:
【参考方案1】:您可以匹配 4 个捕获组中的所有不同部分,而不是使用拆分。
^(\d2/\d2/\d4), (\d2:\d2) - ([^:]+):\s*(.+)
^
字符串开头
(\d2/\d2/\d4)
Capture group 1 匹配日期格式(你可以更具体)
,
字面匹配
(\d2:\d2)
Capture group 2 匹配 timelike 格式 (你也可以更具体)
-
字面匹配
([^:]+)
捕获 group 3 匹配除 :
之外的任何字符 1 次以上
:\s*
匹配 :
和可选的空白字符
(.+)
捕获 group 4 匹配任何字符 1 次以上
Regex demo
import pandas as pd
import re
column_names = ["date", "time", "sender", "message"]
with open('datasets/WhatsApp Chat with Makay.txt', 'r', encoding="utf8") as file:
items = re.findall(
r"^(\d2/\d2/\d4), (\d2:\d2) - ([^:]+):\s*(.+)",
file.read(),
re.MULTILINE
)
df = pd.DataFrame(items, columns=column_names)
pd.set_option('display.max_colwidth', None)
print(df)
输出
date time sender message
0 04/10/2020 12:34 Sender Alright. This is the "message", with multiple de-limiters.
【讨论】:
当我在示例字符串上测试匹配模式时,它的效果非常好。但是,我收到“ValueError:对已关闭文件的 I/O 操作”。当我在数据集上测试它时,在第 7 行。 @Sillette 你能用更新后的代码试试吗? 遇到另一个错误:“UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 4096: character maps towith open('datasets/WhatsApp Chat with Makay.txt', 'r', encoding="utf8") as file:
我放弃了这个测试项目好几个星期,因为我自己无法弄清楚。你在一小时内解决了我的难题。提出的第一个问题,完美的回答,非常感谢您的努力。以上是关于我在探索导出的 WhatsApp 聊天数据集时遇到了正则表达式障碍的主要内容,如果未能解决你的问题,请参考以下文章
如何让我的应用出现在其他应用的共享板中 - 例如whatsApp
实现 ios 聊天(如whatsapp):websocket?
从 WinForm C# 在 WhatsApp 桌面聊天中添加文件