从CSV行中删除空格

时间:2019-05-22 09:32:41

标签: ruby csv whitespace

我需要从CSV行中删除或去除空格。

test.csv

60 500, # want 60500
8 100, # want 8100
5 400, # want 5400
480, # want 480

remove_space.rb

require 'csv'
CSV.foreach('test.csv') do |row|
    row = row[0]
    row = row.strip
    row = row.gsub(" ","")
    puts row
end

我不明白为什么它不起作用。结果与test.csv

相同

有什么主意吗?

2 个答案:

答案 0 :(得分:3)

您的test.csv文件包含narrow no-break space(U + 202F)Unicode字符。这是一个非空白字符。 (常规空格字符为U + 0020。)

您可以在此处查看不同的unicode空间:http://jkorpela.fi/chars/spaces.html

这是一个更通用的脚本-使用POSIX bracket group-删除所有“空格”字符:

require 'csv'
CSV.foreach('test.csv') do |row|
  row = row[0]
  row = row.gsub(/[[:space:]]/,"")
  puts row
end

答案 1 :(得分:2)

问题是那些不是普通空格而是Narrow No-Break Spaces

require 'csv'
CSV.foreach('/tmp/test.csv') do |row|
    puts row[0].delete "\u202f"
end
#⇒ 60500
#  8100
#  5400
#  480

您可以使用\p{Space} matcher除去所有空格,包括unicode空格。

require 'csv'
CSV.foreach('/tmp/test.csv') do |row|
    puts row[0].gsub /\p{Space}/, ''
end