【发布时间】:2019-06-17 22:16:21
【问题描述】:
我有一个 .txt 文件,其中包含如下数据:
[12.06.17, 13:18:36] Name1: Test test test
[12.06.17, 13:20:20] Name2 ❤️: blabla
[12.06.17, 13:20:44] Name2 ❤️: words words words
words
words
words
[12.06.17, 13:29:03] Name1: more words more words
[12.06.17, 13:38:52] Name3 Surname Nickname: ????????
[12.06.17, 13:40:37] Name1: message?
注意,消息前可以有多个名称,也可以出现多行消息。在过去的几天里,我已经尝试了很多方法来将数据分成“日期”、“时间”、“名称”、“消息”组。
我能够弄清楚,正则表达式
(.)(\d+\.\d+\.\d+)(,)(\s)(\d+:\d+:\d+)(.)(\s)([^:]+)(:)
能够捕获直到消息的所有内容(参见:https://regex101.com/r/hQlgeM/3)。但我不知道如何添加消息,以便将多行消息分组到上一条消息中。
最后:如果我能够使用正则表达式从 .txt 中捕获每个组,我实际上如何将每个组传递到单独的列中。过去三天我一直在查看示例,但我仍然无法弄清楚如何最终构建这个数据框。
我尝试使用的代码:
df = pd.read_csv('chat.txt', names = ['raw'])
data = df.iloc[:,0]
re.match(r'\[([^]]+)\] ([^:]+):(.*)', data)
又一次失败的尝试:
input_file = open("chat.txt", "r", encoding='utf-8')
content = input_file.read()
df = pd.DataFrame(content, columns = ['raw'])
df['date'] = df['raw'].str.extract(r'^(.)(\d+\.\d+\.\d+)', expand=True)
df['time'] = df['raw'].str.extract(r'(\s)(\d+:\d+:\d+)', expand=True)
df['name'] = df['raw'].str.extract(r'(\s)([^:]+)(:)', expand=True)
df['message'] = df['raw'].str.extract(r'^(.)(?<=:).*$', expand=True)
df
【问题讨论】:
-
谢谢!但是我如何将它传递给熊猫数据框?我只想要“日期”、“时间”、“名称”、“消息”的四列。你有什么建议吗?
-
使用带有
str.extract的命名组,见regex101.com/r/K4ri2M/3 -
终于成功了吗?