LoginSignup
25
11

More than 5 years have passed since last update.

文字列中の改行コードを統一する

Last updated at Posted at 2018-09-11

例題

"モノ\r\n\rトリ\nテトラ"

"モノ\n\nトリ\nテトラ"

に置き換えたい。つまり \r\n, \r, \n をすべて \n に統一したいです。

結論

"モノ\r\n\rトリ\nテトラ".gsub(/\R/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"

方法

失敗例

"モノ\r\n\rトリ\nテトラ".gsub(/\r|\n/, "\n")
#=> "モノ\n\nジ\nトリ\nテトラ"

\r\n\n に変換したいのに \n\n になってしまいます :sob:

成功例 1 (愚直な方法)

"モノ\r\n\rトリ\nテトラ".gsub(/\r\n|\r|\n/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"

# scivola さんにコメントで教えて頂いた方法
"モノ\r\n\rトリ\nテトラ".gsub(/\r\n?/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"

成功例 2 (ベストな方法)

"モノ\r\n\rトリ\nテトラ".gsub(/\R/, "\n")
#=> "モノ\nジ\nトリ\nテトラ"

\R は改行コードを表すメタ文字です。

で言及されています。

文字列の中には、CR LF のように、複数の文字一続きで1つの意味を表す ようなものが存在します。そのような文字列にマッチするような メタ文字列として以下が存在します。
\R 改行 (?>\x0D\x0A|[\x0A-\x0D\u{85}\u{2028}\u{2029}]) (Unicode 以外では (?>\x0D\x0A|[\x0A-\x0D]) になります)

25
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
11