銀月の符号

Python 使い見習いの日記・雑記

絵文字にマッチする正規表現 Unicode 版

携帯電話の絵文字に触れる機会があったので、絵文字にマッチする正規表現を。

絵文字は Unicode の外字領域にある。なので絵文字以外の外字が使われていないという前提があるならば、こうしてしまえばよい。

import re
private_use = re.compile(ur'[\uE000-\uF8FF]')

これだとあまりにも乱暴なので、以下の Wikipedia 記事を参考に範囲を狭めると、こうなる。

import re

_au = ur'\ue468-\ue5df\uea80-\ueb88'
_docomo = ur'\ue63e-\ue6a5\ue6ac-\ue6ae\ue6b1-\ue6ba\ue6ce-\ue757'
_softbank = ur'\ue001-\ue05a\ue101-\ue15a\ue201-\ue253\ue301-\ue34d\ue401-\ue44c\ue501-\ue537'
_emobile = ur'%s\ue600-\ue619' % _docomo

au = re.compile(u'[%s]' % _au)
docomo = re.compile(u'[%s]' % _docomo)
softbanck = re.compile(u'[%s]' % _softbank)
emobile = re.compile(u'[%s]' % _emobile)

== 文字コード ==
使用される文字コードは以下の通りである。

=== au ===
; Shift_JIS: 第1バイトがF3,F6,F7で始まる2バイト文字すべてと、F440-F47E, F480-F48D
; Unicode: E468-E5DF, EA80-EB88

=== DoCoMo ===
; Shift_JIS: F89F-F8FC, F940-F949, F950-F957, F95B-F95E, F972-F97E, F980-F9FC
; Unicode: E63E-E6A5, E6AC-E6AE, E6B1-E6BA, E6CE-E757

=== SoftBank ===
; Shift_JISEUC・JIS: ESC $ [G/E/F/O/P/Q] + [0x21-0x7E] + 0x0F
; Unicode: E001-E05A, E101-E15A, E201-E253, E301-E34D, E401-E44C, E501-E537

=== emobile ===
※F860-F879(E600-E619)の領域以外は、基本的にDoCoMoと同じコード体系である(一部の商標を除く)。

; Shift_JIS: F89F-F8FC, F940-F949, F950-F957, F95B-F95E, F972-F97E, F980-F9FC, F860-F879
; Unicode: E63E-E6A5, E6AC-E6AE, E6B1-E6BA, E6CE-E757, E600-E619

http://ja.wikipedia.org/wiki/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97