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



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

"abc
de
f 123",123,456

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

"abcdef 123",123,456

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

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

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

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

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

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

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

最新更新