logo
  • #Ruby

正規表現でCSVテキストの最終行を削除する

post-cover

CSVテキストの最終行を削除しようと思った時に結構てこづったのでその方法をメモしておきます。

やりたいこと

↓の最後に出現する改行以降を削除したい。

csv_text = <<~CSV_TEXT
  りんご,apple
  みかん,orange
  イチゴ,strawberry
  バナナ,banana #この行を削除したい
CSV_TEXT

正規表現で最終行を削除

gsubを使って最終行を削除します。

csv_text = <<~CSV_TEXT
  りんご,apple
  みかん,orange
  イチゴ,strawberry
  バナナ,banana #この行を削除したい
CSV_TEXT

csv_text.gsub(/(\r\n|\r|\n).*\z/, '')

#=> りんご,apple
#=> みかん,orange
#=> イチゴ,strawberry

どの改行コードがきてもいいように (\r\n|\r|\n) で改行コードを指定します。

\zはファイルの末尾にマッチするので、これで最後の行のみを削除することができます。

ちなみに末尾表現としてよく使われる$は行の末尾にマッチするので、これを使うとみかん,orange以下の行が全て削除されてしまうので注意です。

© 2025 Koji Dev Blog