我有一个大型CSV文件,我想找到一个能够删除引号内所有新行的正则表达式。
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c
123",d123,
a123,b123,c123,d123,
"a
123",b123,c123,d123,
a123,b123,c123,"d
1
2
3",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123
在这个例子中,我有多行,其中引号中有一个新行,甚至还有一行有多个新行。我需要删除所有这些新行,前提是它们在引号内。这可能吗?
预期结果:
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c123",d123,
a123,b123,c123,d123,
"a123",b123,c123,d123,
a123,b123,c123,"d123",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123
Node.js代码:
var request = require('request')
request.post({
url: '...',
}, function (error, response, body) {
var formatted = body.replace(/.../g, '<#>')
})
答案 0 :(得分:1)
您可以使用正则表达式匹配引号之间的内容,然后遍历这些匹配并将每个匹配替换为没有换行符的版本......
let str = `a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c
123",d123,
a123,b123,c123,d123,
"a
123",b123,c123,d123,
a123,b123,c123,"d
1
2
3",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123`;
const matches = str.match(/"[^"]+"/g);
matches.forEach(m => str = str.replace(m, m.replace(/[\r\n]/g, "")));
console.log(str);
Chrome控制台输出:
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c123",d123,
a123,b123,c123,d123,
"a123",b123,c123,d123,
a123,b123,c123,"d123",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123
您的Node.js代码如下:
var request = require('request')
request.post({
url: '...',
}, function (error, response, body) {
let formatted = body;
const matches = body.match(/"[^"]+"/g);
matches.forEach(m => formatted = formatted.replace(m, m.replace(/[\r\n]/g, "")));
console.log(formatted);
})