You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Python中提取消息的正则表达式性能?含Pandas数据处理需求

优化聊天数据转Pandas DataFrame的高效方案

你的现有方案在小数据集上可行,但大数据集下因为多次正则拆分+循环遍历,耗时会显著增加。下面提供单次正则匹配+直接构造DataFrame的优化方案,既能处理多行消息,又能自动标记群组通知,效率提升明显。

核心思路

用一个包含三个捕获组的正则表达式,一次性扫描所有聊天记录,直接提取date、user、message三个字段:

  • 捕获组1:匹配日期时间格式(如9/6/22, 11:28)
  • 捕获组2:匹配用户名(仅当存在用户名:格式时捕获,否则为None)
  • 捕获组3:匹配消息内容(包括多行文本,自动处理换行)

利用正则的(?s)单行模式让.匹配换行符,确保多行消息被完整捕获;同时通过分支匹配处理「用户消息」和「群组通知」两种场景。

优化后代码

import re
import pandas as pd

data = """
9/6/22, 11:28 - Group creator created group "Example"
9/6/22, 11:39 - User1: This is some text
9/6/22, 11:58 - Group creator changed group name to "Example2"
9/6/22, 12:13 - User2: This is
some text
with multiple lines
9/6/22, 13:13 - Admin changed group profile photo
9/6/22, 14:45 - User3: Hi StackOverflow
"""

# 核心正则:匹配日期时间,然后分支处理用户消息/群组通知
pattern = r'(?s)(\d{1,2}/\d{1,2}/\d{2,4},\s\d{1,2}:\d{2})\s-\s(?:([\w\W]+?):\s(.*?))?(?=\n\d{1,2}/\d{1,2}/\d{2,4},\s\d{1,2}:\d{2}|\Z)'

# 一次性提取所有匹配结果
matches = re.findall(pattern, data.strip())

# 构造DataFrame,处理user为None的情况(标记为群组通知)
df = pd.DataFrame(matches, columns=['date', 'user', 'message'])
df['user'] = df['user'].fillna('group_notification')
# 去除消息内容中的多余换行,替换为空格
df['message'] = df['message'].str.replace('\n', ' ')

print(df)

代码说明

  1. 正则解析:

    • (?s):开启单行模式,让.匹配包括换行在内的所有字符
    • (\d{1,2}/\d{1,2}/\d{2,4},\s\d{1,2}:\d{2}):捕获日期时间
    • (?:([\w\W]+?):\s(.*?))?:非捕获组包裹用户和消息,?表示该组可选(对应群组通知场景)
    • (?=\n\d{1,2}/\d{1,2}/\d{2,4},\s\d{1,2}:\d{2}|\Z):正向预查,匹配下一条记录的开始或文本结尾,确保消息内容不会跨记录
  2. 效率提升:

    • 仅需一次正则扫描即可提取所有字段,避免了原方案中多次re.split、re.findall和循环遍历的开销
    • 利用Pandas的矢量化操作处理user字段填充和message换行替换,比Python循环快一个数量级

输出结果

date                 user                                            message
0  9/6/22, 11:28  group_notification          Group creator created group "Example"
1  9/6/22, 11:39                User1                          This is some text
2  9/6/22, 11:58  group_notification  Group creator changed group name to "Example2"
3  9/6/22, 12:13                User2  This is some text with multiple lines
4  9/6/22, 13:13  group_notification          Admin changed group profile photo
5  9/6/22, 14:45                User3                          Hi StackOverflow

内容的提问来源于stack exchange,提问作者setibs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:32:05