ruby正则表达式删除额外的\ n

我有一个格式错误的.csv文件,这是由一些额外的\n引起的。 例如:

 Name,Comment "Peter","Good morning" "Paul","How are you " "Mary","Fine" 

第二行以不需要的额外\n结尾。

如何删除所有后跟未引用双引号的尾部" (假设整个文件已经读入字符串)?

不要将整个内容读成字符串,使用1.9中的标准CSV解析器来读取它。 如果你有pancakes.csv ,那么:

 require 'csv' data = CSV.open('pancakes.csv').map { |r| r.map(&:strip) } # or data = CSV.open('pancakes.csv').map { |r| r.map(&:chomp) } 

然后你会在data有这个:

 [ ["Name", "Comment"], ["Peter", "Good morning"], ["Paul", "How are you"], ["Mary", "Fine"] ] 

因此,您可以非常简单地将数据清理干净,并且很好地解析。 如果您只需要为其他无法处理嵌入换行符的程序清理CSV,则可以使用CSV将其再次写回。

你不需要Regexp。 它基本上是任何双引号:

 csv_string.gsub("\n\"\n", "\"\n") 

为什么不直接为不以双引号结尾的行添加尾部双引号,并删除空行(只有双引号的行)?