![](/img/trans.png)
[英]Inline string split to place comma separated values as CSS classes in View
[英]String with comma-separated values and newlines: split values and create arrays for each newline
我有一个这样的字符串(来自表单提交):
"apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange"
如何检测值并为每行包含文本的行创建一个数组? 像这样:
[
["apple", "banana"],
["cherries"],
["grapes", "blue berries"],
["orange"]
]
require "csv"
str = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange"
rows = CSV.parse(str, skip_blanks: true)
rows = rows.map{|row| row.map(&:strip)} # remove leading and trailing whitespace
rows.delete([""])
p rows # => [["apple", "banana"], ["cherries"], ["grapes", "blue berries"], ["orange"]]
s = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange"
s.each_line.reject { |l| l =~ /^\s+$/ }.map { |l| l.strip.split(', ') }
肯定有些短
更多相同:
s.each_line.map { |l| l.strip.split(', ') }.reject(&:empty?)
Ruby是有趣的东西!
您可以尝试以下方法:
a = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange"
a.gsub("\r", "").each_line.map{|d| d.strip.split(",")}.reject(&:empty?)
...而且您绝对可以重构它。
尝试这个?
s = "apple, banana\r\ncherries\r\n\r\ngrapes, blue berries \r\n\r\n \r\norange"
result = s.split(/[\r\n]+/).map do |match|
next unless match =~ /\w/
match.strip.split(/,\s?/)
end
result.compact # => [["apple", "banana"], ["cherries"], ["grapes", "blue berries"], ["orange"]]
如果简洁更好:
s.split(/[\r\n]+/).map { |m| next unless m =~ /\w/; m.strip.split(/,\s?/) }.compact
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.