2014/11/15

[Python]Twitterのようにハッシュタグを検索する方法

今、新規アプリを作っているのですが、一機能の一つとして、コメントを投稿できる機能があり、Twitterのようにハッシュタグを許可しようと思うのだが、その際に、Pythonでハッシュタグを検知するにはどうすればいいのだろうか?

参考として
Twitterのつぶやきにある2つ以上の#(ハッシュタグ)にリンクをつけたいときの正規表現について
【正規表現,jQuery,PHP】twitterハッシュタグを抽出する
Pythonでの正規表現の使い方
を読んだところ、以下のような形で収束しました。

import re

p = re.compile(u"(?:^|[^ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9&_\/]+)#([ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9_]*[ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z]+[ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9_]*)")

s = u"#foo かきくけこ #hoge #あいうえお #bar1#dfghjkl       #bar___"
s = s.replace(u' ', ' ')
m = p.findall(s)
for i in m:
  print i
実行した結果、欲しいものは得られたのですが、パターンのグループ化がまだ完全に理解できない。
import re

p = re.compile(u"(^|[^ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9&_\/]+)#([ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9_]*[ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z]+[ヲ-゚ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9_]*)")

s = u"#foo かきくけこ #hoge #あいうえお #bar1#dfghjkl       #bar___"
s = s.replace(u' ', ' ')
m = p.findall(s)
for i in m:
  print i
こうすると、余計なスペースが混入するのでそれを省くというのは、理解できるんだけど。

0 コメント:

コメントを投稿