読者です 読者をやめる 読者になる 読者になる

valid,invalid

関心を持てる事柄について

Ruby で文字列を改行コードで区切る

csv_body = "line 1\r\nline 2\nline 3\rline 4"

csv_body.lines
# => ["line 1\r\n", "line 2\n", "line 3\rline 4"]
# String#lines は \r を改行コードとみなさない

csv_body.lines.map(&:chomp)
# => ["line 1", "line 2", "line 3\rline 4"]
# さらに String#chomp してやらないといけない

csv_body.split(/\R/)
# => ["line 1", "line 2", "line 3", "line 4"]
# String#split を使い、正規表現 /\R/ で区切ると handy

CSV.parse(csv_body)
# => CSV::MalformedCSVError: Unquoted fields do not allow \r or \n (line 2).
# CSV.parse は \r \n \r\n のいずれも受け付けるが混在は許されない

\R

文字列の中には、CR LF のように、複数の文字一続きで1つの意味を表す ようなものが存在します。そのような文字列にマッチするような メタ文字列として以下が存在します。

\R 改行 (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}])

正規表現 (Ruby 2.3.0)より。

参考

Regular Expressions Reference: Special and Non-Printable Characters

text - What is a cross platform regex for removal of line breaks? - Stack Overflow

関連

Excel for Mac で CSV 出力すると改行コードが CR - valid,invalid