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

使用Node.js正则表达式去除CSV文件中的\n和\r

解决CSV解析为数组的问题

看起来你遇到的核心问题是这份CSV数据的格式有缺陷——相邻城市的最后一个经度字段和下一个城市名之间没有用逗号分隔,而是直接用空格连在了一起(比如2.349014 Marseille),直接用.split(',')会把这类内容当成单个元素,导致解析出错。我来帮你一步步解决:

步骤1:先修复CSV格式问题

我们可以用正则表达式把粘在一起的经度 城市名替换成经度,城市名,先把数据格式修正过来。正则的思路是匹配「带小数点的数字 + 空格 + 大写开头的单词」(你的城市名都是首字母大写的单单词,刚好符合这个规则):

// 你的原始CSV字符串
const rawCsv = "Paris,2138551,5.272,1,138,900,48.864716,2.349014 Marseille,794811,1.959,423,439,43.29695,5.38107 Lyon,472317,1.164,251,730,45.74846,4.84671 Toulouse,433055,2.135,230,826,43.60426,1.44367 Nice,338620,1.669,180,545,43.675819,7.289429 Nantes,277269,1.367,147,879,47.21725,-1.55336";

// 修复分隔问题:把"经度 城市名"替换成"经度,城市名"
const fixedCsv = rawCsv.replace(/(\d+\.\d+) ([A-Z][a-z]+)/g, "$1,$2");

步骤2:分割为一维数组

格式修复后,直接用.split(',')就能得到每个字段单独的一维数组:

const csvArray = fixedCsv.split(',');
console.log(csvArray);
// 输出示例:["Paris", "2138551", "5.272", ..., "2.349014", "Marseille", ...]

步骤3(可选):按城市分组为二维数组

如果需要把每个城市的8个字段(城市名、人口、密度、...、纬度、经度)单独分组,可以进一步处理:

const citiesArray = [];
// 每个城市固定8个字段,所以每8个元素为一组
for (let i = 0; i < csvArray.length; i += 8) {
  citiesArray.push(csvArray.slice(i, i + 8));
}

console.log(citiesArray);
// 输出示例:
// [
//   ["Paris", "2138551", "5.272", "1", "138", "900", "48.864716", "2.349014"],
//   ["Marseille", "794811", "1.959", "423", "439", "43.29695", "5.38107"],
//   ... 其他城市条目
// ]

小提示

如果你的CSV后续会出现多单词的城市名(比如New York),上面的正则需要调整,但从你提供的示例数据来看,所有城市都是单单词,这个方案完全适用。

内容的提问来源于stack exchange,提问作者M. Mez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:27