今、新規アプリを作っているのですが、一機能の一つとして、コメントを投稿できる機能があり、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 コメント:
コメントを投稿