ruby regex删除额外的\n
我有一个格式错误的ruby regex删除额外的\n,ruby,regex,Ruby,Regex,我有一个格式错误的.csv文件,这是由一些额外的\n引起的。e、 g: Name,Comment "Peter","Good morning" "Paul","How are you " "Mary","Fine" 第二行以多余的\n结尾 如何删除所有尾随\n后面没有双引号的“(假设整个文件已读入字符串)?为什么不为不以双引号结尾的行添加尾随双引号,并删除空行(只有双引号的行)?不要将整个内容读入一个字符串,使用标准来读取。如果您在pancakes.csv中有这样的内容,那么: require
.csv
文件,这是由一些额外的\n
引起的。e、 g:
Name,Comment
"Peter","Good morning"
"Paul","How are you
"
"Mary","Fine"
第二行以多余的\n
结尾
如何删除所有尾随
\n
后面没有双引号的“
(假设整个文件已读入字符串)?为什么不为不以双引号结尾的行添加尾随双引号,并删除空行(只有双引号的行)?不要将整个内容读入一个字符串,使用标准来读取。如果您在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) }
然后,您将在数据中看到这个:
[
["Name", "Comment"],
["Peter", "Good morning"],
["Paul", "How are you"],
["Mary", "Fine"]
]
因此,您可以非常简单地将所有数据清理干净并进行良好的解析。如果您只需要清理无法处理嵌入换行符的其他程序的CSV,那么您可以使用CSV再次将其写出来。您不需要Regexp。它本身基本上是任何双引号:
csv_string.gsub("\n\"\n", "\"\n")
出于某种原因,我不得不停留在1.8.7中,使用fastercsv
。在fastercsv
中是否有类似之处?谢谢!@ohho:AFAIK 1.9的csv
只是fastercsv
带有一些Unicode补丁,因此它应该与1.8中的fastercsv
工作相同。foreach
,即:FasterCSV::Malformedcsvror(FasterCSV::Malformedcsvror)
我发现该错误不是由多行问题引起的。该错误仅出现在从utf-16 LE
文件转换而来的utf-8
文件中。进一步调查表明,它是由额外的双引号“
s引起的: