Ruby
正規表現

twitter風にハッシュタグ抽出をしたい

More than 5 years have passed since last update.


やりたかったこと


  • 文字列からハッシュタグを抽出したい

  • ハッシュタグとみなすのは#からスペースまでの文字(記号は除く)

  • 複数個のハッシュタグの抽出もしたい


出来たもの

"文字列".scan(/[##][A-Za-zA-Za-z一-鿆0-90-9ぁ-ヶヲ-゚ー]+/).map(&:strip)


結果

def extraction_hashtag(string)

string.scan(/[##][A-Za-zA-Za-z一-鿆0-90-9ぁ-ヶヲ-゚ー]+/).map(&:strip)
end

こんな感じで定義しておけば…

pry(main)> extraction_hashtag("お腹すいた #ラーメン食べたい")

=> ["#ラーメン食べたい"]

取得できる

pry(main)> extraction_hashtag("お腹すいた #ラーメン食べたい #おなぺこ")

=> ["#ラーメン食べたい", "#おなぺこ"]

複数個取得できる

pry(main)> extraction_hashtag("お腹すいた #ラーメン食べたい#おなぺこ")

=> ["#ラーメン食べたい", "#おなぺこ"]

スペースがない場合も分けて取得

pry(main)> extraction_hashtag("#今日は、いい天気だ")

=> ["#今日は"]

記号が入ると途切れる

pry(main)> extraction_hashtag("#今日は、いい天気だ")

=> ["#今日は"]

全角の#でも平気。

追記 4/6 全角数字が抜けていたので修正

pry(main)> extraction_hashtag("全角数字 #012 ")

=> ["#012"]

追記 4/10 いろいろ追記

全角

pry(main)> extraction_hashtag("#ABCabc #ラーメン #012")

=> ["#ABCabc","#ラーメン", "#012"]

半角

pry(main)> extraction_hashtag("#ABCabc #ラーメン #123")

=> ["#ABCabc", "#ラーメン", "#123"]