Edited at

顔文字を抽出する正規表現をPythonで

import re

m = re.compile(r'\([^あ-ん\u30A1-\u30F4\u2E80-\u2FDF\u3005-\u3007\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\U00020000-\U0002EBEF]+?\)')
text = "私は今幸せです(^^)"
res = m.findall(text)
print(res) # -> ['(^^)']


解説

()で囲まれた中でひらがな、カタカナ、漢字が含まれない最短一致を抽出

通常の()の日本語での使われ方を避けて顔文字のみを抽出できるようなルールです。

ex. つらい(とてもつらい)

逆にいうと(^日^)のような漢字、ひらがな込みの高度な顔文字は抽出できません。

結果をもとに適宜ルールを変更して使っていただければ幸いです。


参考にした記事

https://note.nkmk.me/python-re-regex-character-type/

http://www-creators.com/archives/1804

http://www-creators.com/archives/1827