Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby regex删除额外的\n_Ruby_Regex - Fatal编程技术网

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引起的: