どなブロ

Ruby, Rails, その他気になったこととか思ったこととか

【Ruby】複数行ある文字列内で、特定のワードの次の行にある文字列を取る

すごくニッチな感じだと思いますが。

やりたいこと

こんな感じの文章があったとして

ほげほげほげほげ

ほげえええええええええああああああ

どうもです

提供
ほげほげ株式会社

提供の次に来るワードを拾いたい…!!
という事がありました。

each_lineで1行ずつ取る

まず文字列を改行文字で分割して1行ずつ取ってくれるeach_lineを使いましょう。
each_line (String) - Rubyリファレンス

ついでに改行文字もmap(&:chomp)で消します

hoge_lines = hogehoge.each_line.map(&:chomp)

# => ["ほげほげほげほげ", "", "ほげえええええええええああああああ", "", "どうもです", "", "提供", "ほげほげ株式会社"]

eachで回しながら目的の物を取る

eachで回しながら取得するトリガーにしたい提供が来たら、
配列の次に入っている文字列(次の行の文字列)を取ります。

hoge_lines.each.with_index do |hoge, i|
  if hoge == "提供"
    puts hoge_lines[i + 1]
  end
end

# => ほげほげ株式会社

こんな感じでした。

参考

ruby get next value on each loop - Stack Overflow

今さら知ったこと Rubyで文字列を改行で分割して改行コードも除く each_line.map(&:chomp) - osamuk's blog