半角カナ文字

Pythonで半角カナ文字かどうかを判定するには、正規表現を使う方法があります。⁴⁶

例えば、次のような関数を定義して、文字列が半角カナだけで構成されているかどうかをチェックできます。

1
2
3
4
import re

def is_hankaku_kana(s):
    return re.match(r"^[ヲ-゚]+$", s) is not None

この関数は、文字列sが半角カナの範囲(ヲから゚)にマッチするかどうかを判定します。⁶

他の言語(JavaScriptやC#など)でも同様の方法が使えます。¹²

ソース: Bing との会話 2023/4/18

半角カナ文字を判定するPYPIパッケージはありますか?

半角カナ文字を判定する専用のPYPIパッケージは見つかりませんでしたが、標準ライブラリのunicodedataモジュールを使うことができます。¹

unicodedataモジュールは、Unicode文字に関する情報を提供する関数を持っています。¹

例えば、unicodedata.east_asian_width(chr)という関数は、文字chrの東アジアの幅を返します。¹

半角カナ文字は、この幅が’Na’(ナロー)になります。¹

なので、次のような関数を定義して、文字列が半角カナだけで構成されているかどうかをチェックできます。

1
2
3
4
import unicodedata

def is_hankaku_kana(s):
    return all(unicodedata.east_asian_width(c) == 'Na' for c in s)

この関数は、文字列sの各文字の幅が’Na’であるかどうかを判定します。

ソース: Bing との会話 2023/4/18

H で判定するのでは?

1
2
3
4
import unicodedata

def is_hankaku_kana(s):
    return all(unicodedata.east_asian_width(c) = 'H' for c in s)
1
2
3
4
unicodedata.east_asian_width("ア")
'H'
unicodedata.east_asian_width("a")
'Na'

Unicode® Standard Annex #11 EAST ASIAN WIDTH

In a broad sense, wide characters include W, F, and A (when in East Asian context), and narrow characters include N, Na, H, and A (when not in East Asian context).

python jaconvライブラリで半角カナ文字を判定することは可能ですか?

はい、可能です。jaconvというライブラリは、日本語の文字変換に便利な関数を提供しています。¹²

jaconvには、半角カナ文字を全角カタカナ文字に変換する関数(h2z)や、全角カタカナ文字を半角カナ文字に変換する関数(z2h)があります。¹²

これらの関数を使って、文字列が半角カナだけで構成されているかどうかを判定することができます。

例えば、次のような関数を定義して、文字列が半角カナだけで構成されているかどうかをチェックできます。

1
2
3
4
import jaconv

def is_hankaku_kana(s):
    return s == jaconv.z2h(jaconv.h2z(s, kana=True), kana=True)

この関数は、文字列sを全角カタカナに変換してから半角カナに戻したときに、元の文字列sと同じになるかどうかを判定します。¹

ソース: Bing との会話 2023/4/18

jaconv 以外に半角カナ文字の判定に使えるパッケージはありますか?

jaconv以外にも、半角カナ文字の判定に使えるパッケージはいくつかあります。

例えば、mojimojiというライブラリは、日本語の文字変換に高速な関数を提供しています。¹

mojimojiには、半角カナ文字を全角カタカナ文字に変換する関数(h2z)や、全角カタカナ文字を半角カナ文字に変換する関数(z2h)があります。¹

これらの関数を使って、文字列が半角カナだけで構成されているかどうかを判定することができます。

例えば、次のような関数を定義して、文字列が半角カナだけで構成されているかどうかをチェックできます。

1
2
3
4
import mojimoji

def is_hankaku_kana(s):
    return s == mojimoji.z2h(mojimoji.h2z(s, kana=True), kana=True)

この関数は、文字列sを全角カタカナに変換してから半角カナに戻したときに、元の文字列sと同じになるかどうかを判定します。¹

他にも、正規表現やunicodedataモジュールを使う方法があります。²³

ソース: Bing との会話 2023/4/18

半角カナ文字のUnicodeでの範囲をおしえてください

半角カナ文字のUnicodeでの範囲は、U+FF61〜U+FF9Fです。¹

これは、いわゆる半角のカナ記号を含む範囲で、UTF-8表現された場合には3バイト必要となります。¹

一方、全角のカタカナ文字のUnicodeでの範囲は、U+30A0〜U+30FFです。⁵

これは、片仮名(93文字)とCommon(3文字)を含む範囲で、UTF-8表現された場合には3バイト必要となります。³

ソース: Bing との会話 2023/4/18