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")
为什么不直接为不以双引号结尾的行添加尾部双引号,并删除空行(只有双引号的行)?