[M1 Mac, Big Sur 11.6.7, Python 3.10.4]
[C++]98の記事で作成した関数がappファイルではうまく動いてくれないため、急遽Python版を作成しました。なおアプリの実行ファイルではC++版は正常に動作します。
C++版作成には結構苦労していて正直これ以上いじりたくないので、製作中のFLTKアプリにはこの20行のPython版をモジュール化して導入するつもりです。
C++で日本語を扱うのはなかなか難しいですから、いざとなればPythonの力を借りることにします。
import re
from enum import Enum
class CharType(Enum):
NUMBER = 1
ALPHABET = 2
HIRAGANA = 3
KATAKANA = 4
KANJI = 5
def CharExtractPy(str, type):
if type == CharType.NUMBER:
ch = re.findall('[0-9]+', str)
elif type == CharType.ALPHABET:
ch = re.findall('[a-zA-Z]+', str)
elif type == CharType.HIRAGANA:
ch = re.findall('[ぁ-ゟ]+', str)
elif type == CharType.KATAKANA:
ch = re.findall('[\ァ-ヿ]+', str)
elif type == CharType.KANJI:
ch = re.findall('[\u2E80-\u2FDF\u3005-\u3007\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\U00020000-\U0002EBEF]+', str)
return ch
if __name__ == '__main__':
str = "日本語ハローわぁるどHelloはろぅ[123]"
# 数字
ch1 = CharExtractPy(str,CharType.NUMBER)
print("数字")
print(ch1)
# 英字
ch2 = CharExtractPy(str,CharType.ALPHABET)
print("英字")
print(ch2)
# ひらがな
ch3 = CharExtractPy(str,CharType.HIRAGANA)
print("ひらがな")
print(ch3)
# カタカナ
ch4 = CharExtractPy(str,CharType.KATAKANA)
print("カタカナ")
print(ch4)
# 漢字
ch5 = CharExtractPy(str,CharType.KANJI)
print("漢字")
print(ch5)
--------------------------------------------------
出力
--------------------------------------------------
数字
['123']
英字
['Hello']
ひらがな
['わぁるど', 'はろぅ']
カタカナ
['ハロー']
漢字
['日本語']