使用带有节点的csv文件中的Regexp删除\ n和\ r \ n

时间:2018-04-28 19:10:40

标签: node.js regex

我正在尝试阅读包含城市信息的.csv文件的内容,如下所示:

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

所以我想解析文件,并使用.split(',')将其转换为数组(不是对象)。

这是我的问题,当我使用Regexp删除这些该死的\ n和\ r时使用以下正则表达式时,它不起作用,它们仍然在窃听我的输出:

var cities = data.replace(/\n/g, '').replace("'", '').split(',');

然后,当我使用这个正则表达式时,它也会删除所有“,”!所以我尝试用“_”替换它们,这是有效的,但后来我有另一个问题,它还从纬度和经度中删除减号( - ):

var cities = await data.replace(/(?:\\[rn]|[\r\n]+)+/g,
'_').replace(/[^\w\s]/gi, '').split('_');

(顺便说一下“_”并没有出现在上面的代码中,因为分裂idk为什么)

如何在不触及“,”和“ - ”的情况下删除\ n和\ s,就像第二个正则表达式一样?

我真的没有进入正则表达式。

编辑:我已经使用了其中一个解决方案,但输出仍然有问题,这意味着以下行仍未删除空白行: var cities = await data.replace(/(?:\ [rn] | [\ r \ n] +)+ / g,',')。replace(/ [^ \ w \ s, - ] / gi,' , ')分裂(',“);

尽管上面有正则表达式,仍然必须有/ n或/ r。谁知道如何摆脱线?

输出被窃听,你可以看到:

  

console.log('城市:'+ i +'sur'+ cities.length +' - “'+ cities [i] +'”,“'+ countryName +'”,'+ cities [ii] +',' +城市[III] +”,   '+城市[iv] +','+城市[v] +','+城市[vi] +'\ n');

城市:0 sur 1095 - “纽约市”,“美国”,8537673,31,709,34,245

城市:6 sur 1095 - “881”,“United States”,40,730610,-73,935242,Los Angeles

城市:12 sur 1095 - “3971883”,“美国”,14,752,15,931,949

城市:18 sur 1095 - “34”,“United States”,052235,-118,243683,Chicago,2720546

1 个答案:

答案 0 :(得分:0)

我使用了WiktorStribiżew的代码

  

/ [^ \ w \ s, - ] / gi -

并添加了“。”在其中,因为这导致数组被分开

此外,我发现向我发送CSV的人改变了它的结构......所以现在我认为它有效,这是最终的结果。谢谢你的帮助

  

var cities = await data.replace(/(?:\ [rn] | [\ r \ n] +)+ / g,',')。replace(/ [^ \ w \ s, - 。] / gi,',')。split(',');