LoginSignup
18
18

More than 5 years have passed since last update.

テキストをノコギリと正規表現でやんわり引っこ抜きながらHashにまとめるイディオム

Last updated at Posted at 2014-04-01

なんか他に再利用できそうなイディオムなのでメモ。

コード

Nokogiri::HTML(open(url)).xpath('//hogehoge').children.map{ |e|
  case e.text.strip
  when /データ年次.*?:(.*)$/
    {year:$1.strip}
  when /情報.*?:(.*)/
    {tag:$1.strip}
  when /再配布可否.*?:(.*)$/
    {redistribution_allowed:$1.strip}
  when /商用利用可否.*?:(.*)$/
    {commercial_use_allowed:$1.strip}
  when /テータ提供.*?:(.*)$/
    {provider:$1.strip}
  when /問い合わせ先電話番号.*?:(.*)$/
    {tel:$1.strip}
  when /内容.*?:(.*)$/
    {description:$1.strip}
  when /コメント.*?:(.*)$/
    {comment:$1.strip}
  end
}.compact.inject(&:merge)

簡単な手順

  1. ノコギリでのっとうぇるすとらくちゃあどなテキストを要素単位へギコギコして配列を作る。
  2. casewhenで正規表現にマッチさせたのをHashにしてmapする。(ちなみに、マッチした内容は$1とかで取れる。あとゴミが混じるのでついでにstripも。)
  3. caseでマッチしない場合はnilになるのでcompactする。
  4. それをinject(&:merge)して1つのHashへ結合する。
  5. できた!

ポイント

  • やんわり。
  • お手軽。
  • マッチさせたい対象とHashのキーの対応が見やすい。
  • 条件追加しやすい。
  • map.compact.inject(&:merge)が楽しい。
18
18
0

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