今川館

都内勤務の地味OLです

Unicodeの「横棒」文字

[日本語の横棒記号に絶望した]
http://taichino.com/programming/1384

[従来の文字コードUnicodeの対応に関する諸問題]
http://euc.jp/i18n/ucsnote.ja.html


Unicodeでは横棒文字がたくさん定義されている。
しかし、人が画面に入力する横棒なんて、見た目が同じならどれを使っていてもどうでもいいので、分けられるとプログラムが面倒になるという話。

一応、上記リンクから半角文字以外を抜き出したのが以下の変数。

KANA_DASH_PATTERN = (
    ur'\u2010'
    ur'\u2011'
    ur'\u2012'
    ur'\u2013'
    ur'\u2014'
    ur'\u2015'
    ur'\u207b'
    ur'\u208b'
    ur'\u2212'
    ur'\u30fc'
    ur'\uff0d'
    ur'\uff70'
    ur'\u4e00'
)

これを使って、全角・全角ひらがな・全角カタカナの正規表現パターンを以下の通り作った。
KANA_DASH_PATTERN変数に横棒をまとめているので、↓ここで言ったように+演算子で連結しないと構文エラーになる。
http://d.hatena.ne.jp/imagawa_yakata/20091221/1261363176

# -*- coding: UTF-8 -*-

KANA_DASH_PATTERN = (
    ur'\u2010'
    ur'\u2011'
    ur'\u2012'
    ur'\u2013'
    ur'\u2014'
    ur'\u2015'
    ur'\u207b'
    ur'\u208b'
    ur'\u2212'
    ur'\u30fc'
    ur'\uff0d'
    ur'\uff70'
    ur'\u4e00'
)

# 全角のみ一致
ZENKAKU_PATTERN = (
    ur'^[一-龠ぁ-ゞァ-ヴ0-9a-zA-Z'+
    KANA_DASH_PATTERN+
    ur']+$'
)

# 全角ひらがな
HIRAGANA_PATTERN = (
    ur'^[ぁ-ゞ'+
    KANA_DASH_PATTERN+
    ur']+$'
)

# 全角カタカナ
KATAKANA_PATTERN = (
    ur'^[ァ-ヴ'+
    KANA_DASH_PATTERN+
    ur']+$'
)

print ZENKAKU_PATTERN #=> ^[一-龠ぁ-ゞァ-ヴ0-9a-zA-Z‐‑‒–——⁻₋−ー−ー一]+$
print HIRAGANA_PATTERN #=> ^[ぁ-ゞ‐‑‒–——⁻₋−ー−ー一]+$
print KATAKANA_PATTERN #=> ^[ァ-ヴ‐‑‒–——⁻₋−ー−ー一]+$