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

如何用正则表达式在长CSV文本特定位置插入换行符?

修复无换行CSV文件的记录分割问题

问题背景

有一个包含数十万条记录的CSV文本文件,所有记录未添加换行符而连在一起。每条新记录的起始有固定模式:hh:mm:ss.sss,Buzzard,需要将文本分割为每条独立的记录,保存为规范的CSV文件。原尝试的R正则匹配代码未能成功实现需求。

解决方案

核心思路是利用正向预查定位每条新记录的起始位置(除第一条外),在该位置插入换行符\n。以下是完整的R实现代码:

library(stringr)
library(data.table)

# 原始无换行数据
Data_raw <- c("07:04:08.401,Buzzard Brook,123456.78,1234567.89,196.25,-0.41,-0.60,0.07,LARS,326800.31,6749792.66,BIG Box,0.00,0.00,0.0007:04:08.401,Buzzard Brook,123456.78,1234567.89,196.25,-0.41,-0.60,0.07,LARS,123456.78,1234567.89,BIG Box,0.00,0.00,-401.3107:02:55.357,Buzzard Brook,123456.78,1234567.89,50.41,-0.42,-0.01,0.01,LARS,123456.78,1234567.89,BIG Box,Obj 2 N.A.,Obj 2 N.A.,Obj 2 N.A.07:03:10.364,Buzzard Brook,123456.78,1234567.89,50.27,-0.20,-0.03,0.00,LARS,123456.78,1234567.89,BIG Box,Obj 2 N.A.,Obj 2 N.A.,Obj 2 N.A.")

# 正则分割:在每条新记录起始前插入换行
Data_raw_2 <- str_replace_all(Data_raw, "(?<=\\S)(?=\\d{2}:\\d{2}:\\d{2}\\.\\d{3},Buzzard)", "\n")

# 验证分割结果
cat(Data_raw_2)

# 保存为规范的文本/CSV文件
wd <- getwd()
write_lines(Data_raw_2, paste0(wd, "/cleaned_records.csv"))

正则说明

  • (?<=\\S):正向后顾断言,确保匹配位置的前一个字符不是空白(避免在文本开头插入多余换行)
  • (?=\\d{2}:\\d{2}:\\d{2}\\.\\d{3},Buzzard):正向预查断言,匹配后面紧跟hh:mm:ss.sss,Buzzard模式的位置
  • 将上述匹配到的位置替换为\n,即可实现每条记录独立分隔

效果验证

处理后的数据会变成每条记录单独一行的规范格式,与需求中的目标格式完全一致,可直接作为CSV文件使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:25:15