我有一个包含此错误的 .csv 文件,我想使用正则表达式进行更正,某些字段包含换行符,例如:
"abc
de
f 123",123,456
应该在一行中,我只想删除换行符但保留文本
"abcdef 123",123,456
我试图在双引号内隔离,但这仅删除了第一个换行符:
^(?:"[0-9a-zA-Z])\r?\n(?=",)
(文本可以包含数字和其他字符,所以我尝试包含它们,我只想删除换行符并保留所有其他字符,希望清楚)
如果您使用重复捕获组,则不可能在单个查询中捕获多个换行符;正则表达式引擎只能抓取最后一场比赛。话虽如此,如果您使用的是 powergrep (或其他一些可以选择性地替换捕获组,而不是整个匹配项的搜索和替换),您真的需要单线吗?
^"(?:[^"\n]|(\n+))*",
将在 and 之间查找"
并",
匹配任何不包含 a 的文本"
,将其保留在引用的语句中 - 或者,将捕获它找到的最后一组换行符。如果您的工具只能删除/替换捕获组中的文本,为什么不连续使用此正则表达式几次?它会单独留下您的无错字行,但每次运行时都会从您的错误行中删除一大块空白。(在这里试试!请注意,这匹配所有行,但只捕获格式错误的空格)
你怎么知道你什么时候完成?尝试使用^(?=.*\n.*)"[^"]*",
- 它会匹配 csv 文件中仍然有换行符的任何行,但会忽略格式正确的行。当此正则表达式没有返回匹配项时,您可以确信您的文件没有错字。(在这里试试!)
这不是一个非常优雅的解决方案,但是如果您运行它足够多次,您将摆脱所有的空白。