LoginSignup
22
17

More than 5 years have passed since last update.

[初学者]subメソッドとgsubメソッドで文字を置換する

Last updated at Posted at 2018-07-09

目的

  • 人のコードを読んでいるときに「gsub」が分からなかったので調べた内容メモ

条件

  • ruby 2.4.1

目次

  • subメソッドとは
  • gsubメソッドとは
  • gsubメソッドのスニペット

subメソッドとは

subメソッドは指定したパターンにマッチした最初の部分を特定の文字列に置換します。パターンには文字列や正規表現が使えます。

irbでやってみた
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.sub(/shi/, 'ya')
# 第1引数に最初にマッチした置換されるパターン文字(正規表現)を指定
# 第2引数に置換したい新しい文字列を指定


結果
=> "yamada-shimada"
# 最初にマッチした'shi'が'ya'に置換される
ブロックをとる場合
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.sub(/shi/) {|str| 'ya'}

結果
=> "yamada-shimada"
# 最初にマッチした'shi'が'ya'に置換される

---
a.sub(/\w+/) {|str| str.upcase}

結果
=> "SHIMADA-shimada"
# 最初にマッチした'shi'のブロックを大文字にする

gsubメソッドとは

gsubメソッドはマッチしたすべての部分を特定の文字列に置換します。パターンには文字列や正規表現が使えます。

irbでやってみた
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.gsub(/shi/, 'ya')
# 第1引数にマッチした置換されるパターン文字(正規表現)を指定
# 第2引数に置換したい新しい文字列を指定


結果
=> "yamada-yamada"
# 全てマッチした'shi'が'ya'に置換される
ブロックをとる場合
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.gsub(/shi/) {|str| 'ya'}

結果
=> "yamada-yamada"
# マッチした'shi'が'ya'に置換される

---
a.gsub(/\w+/) {|str| str.upcase}

結果
=> "SHIMADA-SHIMADA"
# マッチした'shi'のブロックを大文字にする

gsubメソッドのスニペット

  def normalize(str)
    str.strip                                    # 前後の空白除去
       .tr("0-9a-zA-Z  ()-−", "0-9a-zA-Z  ()-")  # 全角英数字を半角に
       .gsub("\t", ' ').gsub(/ +/, " ")          # 空白を単一半角スペースに統一
       .gsub("\r\n", "\n").gsub("\r", "\n")      # 改行を\nに統一
  end

まとめ

いろいろ調べてみると「gsubメソッド」は結構使いそう。あと「正規表現」

参考

第6回 正規表現と文字列の置換
subやgsubで括弧とマッチした部分の再利用、および式展開の方法

22
17
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
22
17