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

字符串索引越界问题:聊天数据拆分至DataFrame的正则替代方案优化

修复聊天数据拆分的索引越界问题并生成DataFrame

问题根源

  • 原代码直接使用固定偏移量(如i+21、i+22)访问字符串索引,当循环到字符串末尾附近时,偏移后的索引会超出字符串长度,触发string index out of range错误。
  • 内部循环硬编码固定上限342671,完全不考虑实际数据长度,同样会导致索引越界。
  • 手动判断日期格式的逻辑过于死板,一旦聊天记录的日期格式有细微变化(如12/24小时制切换),代码直接失效。

解决方案:用正则表达式替代手动索引操作

正则表达式可以精准匹配符合格式的聊天记录,从根源上避免索引越界问题,同时适配更灵活的格式变化。

代码实现

import re
import pandas as pd

# 假设data是你的原始聊天字符串
# 匹配聊天记录的正则模式,适配示例中的日期格式
pattern = r'\[(\d{2}/\d{2}/\d{2}, \d{1,2}:\d{2}:\d{2} [AP]M)\] .*?: (.*?)(?=\n\[|\Z)'

# 查找所有匹配的记录,re.DOTALL允许匹配多行消息
matches = re.findall(pattern, data, re.DOTALL)

# 拆分日期和消息列表
dateList = [match[0] for match in matches]
messageList = [match[1].strip() for match in matches]

# 生成DataFrame
chat_df = pd.DataFrame({
    '日期': dateList,
    '消息': messageList
})

# 查看结果
print(chat_df.head())

代码说明

  • pattern中的分组分别捕获日期部分和消息内容:
    • 第一个分组(\d{2}/\d{2}/\d{2}, \d{1,2}:\d{2}:\d{2} [AP]M)匹配并提取日期时间字符串;
    • 第二个分组(.*?)(?=\n\[|\Z)匹配消息内容,直到下一条记录的开头(\n\[)或字符串结尾(\Z),支持多行消息。
  • re.DOTALL参数让.可以匹配换行符,解决多行消息的匹配问题。
  • 最终通过列表推导式拆分日期和消息,直接生成DataFrame,逻辑简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18