LoginSignup
1
1

More than 3 years have passed since last update.

正規表現で大文字から始まる文字列を取り出す(Ruby)

Posted at

今回やる事

タイトル通り、正規表現で大文字から始まる文字列を取り出します。

コード

今回書いたコードは以下の通り


# 配列から大文字から始まる文字列を抜き出すメソッド
def upperstr(array)

  # 配列の添字として使用する変数
  count = 0

  # 大文字から始まる文字列を格納する配列
  upper = []

  # eachメソッドで配列に含まれている要素を全て取り出す
  array.each{|arraystr|

    # 正規表現で先頭が大文字から始まりる文字列を抽出し、配列(upper)に格納する
    upper[count] = arraystr.slice(/^[A-Z].*/)

    # 配列の添字に1を加算する
    count += 1
  }

  # 文字列の先頭が小文字だった場合は配列にnilが格納されるため、deleteメソッドでnilを削除する。
  upper.delete(nil)

  # メソッドの返り値として、大文字から始まる文字列を格納した配列を変えす。
  return upper

end


# ユーザー用のガイド
p "文字列を半角スペースで区切って入力してください"

# コンソールから入力した文字列を変数に代入
str = gets

# 入力された文字列を半角スペースで区切って配列に代入
ary = str.split(" ")

# upperstrメソッドの返り値を変数に代入
# (upperstrメソッドは大文字から始まる文字列を取り出すメソッド)
upperary = upperstr(ary)

# ユーザー用のガイド
p "大文字から始まる文字列を取り出しました"

# eachメソッドで配列に含まれている要素を全て取り出す
upperary.each{|ustr|
  # 配列の中身を表示
  p ustr
}

正規表現

※各メソッドや処理についてはコメントに書いたので説明は割愛。
今回はupperstrメソッド内で使用しているsliceメソッドで正規表現を使っております。
噛み砕きまくって説明しますと、以下の通りです。

①コード
upper[count] = arraystr.slice(/^[A-Z].*/)

②/
/ と / で囲まれた範囲が正規表現パターンの範囲となる

③^
^の直後の文字が先頭の文字であることを表しています

④[A-Z]
AからZという意味であり、大文字であることを表しています。
^[A-Z] とすることで先頭が大文字である文字列を検索する事ができます。
小文字にしたい場合は[a-z]です。

⑤.
. は任意の1文字です。

⑥*
 は直前の文字列が0回以上繰り返すことを意味します。
.
 と書くことで、「任意の文字列が0回以上繰り返す」ということになります。
なんかわかりづらいと思いますが、「先頭の文字以外はどうでもいいよ」っていうことです。

動作確認

実際にプログラムを動かした結果を書いておきます。
入力値は「aaa AAA B b CC cc DDDDD ddddd」です。
大文字から始まる文字列を取り出すので、想定される結果は「AAA B CC DDDDD」となります。

% ruby regex.rb 
"文字列を半角スペースで区切って入力してください"
aaa AAA B b CC cc DDDDD ddddd
"大文字から始まる文字列を取り出しました"
"AAA"
"B"
"CC"
"DDDDD"

想定通りの結果が出ました!今回の記事は以上です!

1
1
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
1
1