正则表达式:删除双引号字段中的换行符?

Regex: Remove line breaks in double quote field?

我有一个 .csv 文件,我想用正则表达式更正这个错误,一些字段包含换行符,例如:

"abc

de
f 123",123,456

应该在一行中,我只想删除换行符但保留文本

"abcdef 123",123,456

我试图在双引号内进行隔离,但这只删除了第一个换行符:

^(?:"[0-9a-zA-Z])\r?\n(?=",)

(文本可以包含数字和其他字符,所以我尝试包含它们,我只想删除换行符并保留所有其他字符,希望清楚)

如果您使用重复捕获组,则无法在单个查询中捕获多个换行符;正则表达式引擎只能抓取最后一场比赛。话虽这么说,如果您正在使用 powergrep(或其他一些可以选择性地替换捕获组而不是整个匹配项的搜索和替换),您真的 需要 一行吗?

^"(?:[^"\n]|(\n+))*", 将在 "", 之间查找并匹配不包含 " 的任意数量的文本,将其保留在您引用的语句中 - 或者,或者,将 捕获 它找到的最后一组换行符。如果您的工具只能在捕获组中 remove/replace 文本,为什么不连续使用几次这个正则表达式呢?它会让你的无拼写错误的行单独存在,但每次它是 运行 时都会从你的错误行中删除一大块空白。 (Try it here! 请注意,此 匹配 所有行,但仅 捕获 格式错误的空格)

你怎么知道什么时候完成的?尝试使用 ^(?=.*\n.*)"[^"]*", - 它会匹配您的 csv 文件中仍然有换行符的任何行,但会忽略格式正确的行。当此正则表达式 returns 没有匹配项时,您可以确信您的文件没有拼写错误。 (Try it here!)

这不是一个非常优雅的解决方案,但如果您 运行 它足够多次,您将摆脱所有空白。