Pythonで文字列に含まれる文字の種類を判定する方法について解説します。文字種類判定のメソッドはいくつかあるので目的に合わせて使い分けましょう。
Contents
- 1 文字列に含まれる文字種類の判定メソッド
- 2 各種判定メソッドの使い方
- 2.1 10進数値であるかを判定する isdecimal
- 2.2 数値であるかを判定する isdigit
- 2.3 数値文字であるかを判定する isnumeric
- 2.4 isdecimal、isdigit、isnumericの結果の違い
- 2.5 英数字であるかを判定する isalnum
- 2.6 英字であるかを判定する isalpha
- 2.7 ASCII文字であるかを判定する isascii
- 2.8 小文字であるかを判定する islower
- 2.9 大文字であるかを判定する isupper
- 2.10 単語の先頭文字だけが大文字の文字列であるかを判定する ~istitleメソッド~
- 2.11 印字可能な文字であるかを判定する isprintable
- 2.12 空白文字であるかを判定する isspace
- 2.13 有効な識別子であるかを判定する isidentifier
- 2.14 予約済みのキーワードであるかを判定する keyword.iskeyword
- 3 まとめ
文字列に含まれる文字種類の判定メソッド
Pythonで文字列に含まれる文字の種類を判定するにはstrクラスの文字種類判定用のメソッドを使用することができます。
strクラスの文字種類判定のメソッドの名前は「isxxxxx」というように、isから始まるメソッドになっているのが特徴です。
文字種類の判定メソッドとしては、以下のようなものがあります。
メソッド名 | 概要説明 |
---|---|
isdecimal | 10進数値であるかを判定する |
isdigit | 数値であるかを判定する |
isnumeric | 数値文字であるかを判定する |
isalnum | 英数字であるかを判定する |
isalpha | 英字であるかを判定する |
isascii | ASCII文字であるかを判定する |
islower | 小文字であるかを判定する |
isupper | 大文字であるかを判定する |
istitle | 単語の先頭文字だけが大文字の文字列であるかを判定する |
isprintable | 印字可能な文字であるかを判定する |
isspace | 空白文字であるかを判定する |
isidentifier | 有効な識別子であるかを判定する |
strクラスのメソッドではありませんが、予約済みのキーワードである識別する場合はkeywordモジュールのメソッドが使用できます。
メソッド名 | 概要説明 |
---|---|
keyword.iskeyword | 予約済みのキーワードであるかを判定する |
以降では、上記の各メソッドの使い方を簡単な使用例を見せつつご紹介します。
各種判定メソッドの使い方
10進数値であるかを判定する isdecimal
10進数であるかを判定するためには、isdecimalメソッドを使用します。
print("=== isdecimal ===") print("12345".isdecimal()) print("0b0101".isdecimal())
【実行結果】 === isdecimal === True False
isdecimalメソッドでは、文字列中の全てが十進数字で、かつ1文字以上である場合はTrueを、そうでない場合はFalseを返却します。十進数字は、Unicodeの一般カテゴリ「Nd (Decimal_Number)」に含まれる文字を指します。
isdecimalの公式ドキュメントの記載はこちらを参照してください。
数値であるかを判定する isdigit
数値であるかを判定するためには、isdigitメソッドを使用します。
print("=== isdigit ===") print("12345".isdigit()) print("0b0101".isdigit())
【実行結果】 === isdigit === True False
isdigitメソッドでは、文字列中の全ての文字が数字で、かつ1文字以上の場合にTrueを、そうでない場合はFalseを返却します。ここでの数字は十進数字に加えて上付き数字等のような数字を含みます。
isdigitの公式ドキュメントの記載はこちらを参照してください。
数値文字であるかを判定する isnumeric
数値文字(漢数字、ローマ数字など含む)であるかを判定するためには、isnumericメソッドを使用します。
print("=== isnumeric ===") print("一万五千".isnumeric()) print("0b0101".isnumeric())
【実行結果】 === isnumeric === True False
isnumericメソッドでは、文字列中の全ての文字が漢数字やローマ数字等のような数を表す文字で、かつ1文字以上の場合はTrueを、そうでない場合はFalseを返却します。
isnumericの公式ドキュメントの記載はこちらを参照してください。
isdecimal、isdigit、isnumericの結果の違い
上記の例ではisdecimal、isdigit、isnumericの結果の違いは少し分かりにくいため、結果の違いをまとめます。
文字種類 | isdecimalメソッド | isdigitメソッド | isnumericメソッド |
---|---|---|---|
半角数字(‘12345’) | True | True | True |
上付き/下付き数字(‘⁰₀’) | False | True | True |
全角数字(‘12345’) | True | True | True |
漢数字(‘一弐参肆伍’) | False | False | True |
ローマ数字(‘ⅠⅡⅢⅣⅤ’) | False | False | True |
isdecimalメソッドでは、上付き/下付き数字(‘⁰₀’)のようなものを判定することができませんが、isdigitメソッドを使えば判定することができます。また、漢数字/ローマ数字のような文字も判定するには、isnumericメソッドを使えば判定することができます。
広い範囲で数字を判定したい場合には、isnumericメソッドを利用しましょう。
以下は上記の表における判定確認のためのサンプルプログラムです。
print("--- 半角数字('12345')") print(f'isdecimal: {"12345".isdecimal()}') print(f'isdigit: {"12345".isdigit()}') print(f'isnumeric: {"12345".isnumeric()}') print("--- 上付き数字、下付き数字('⁰₀')") print(f'isdecimal: {"⁰₀".isdecimal()}') print(f'isdigit: {"⁰₀".isdigit()}') print(f'isnumeric: {"⁰₀".isnumeric()}') print("--- 全角数字('12345')") print(f'isdecimal: {"12345".isdecimal()}') print(f'isdigit: {"12345".isdigit()}') print(f'isnumeric: {"12345".isnumeric()}') print("--- 漢数字('一弐参肆伍')") print(f'isdecimal: {"一弐参肆伍".isdecimal()}') print(f'isdigit: {"一弐参肆伍".isdigit()}') print(f'isnumeric: {"一弐参肆伍".isnumeric()}') print("--- ローマ数字('ⅠⅡⅢⅣⅤ')") print(f'isdecimal: {"ⅠⅡⅢⅣⅤ".isdecimal()}') print(f'isdigit: {"ⅠⅡⅢⅣⅤ".isdigit()}') print(f'isnumeric: {"ⅠⅡⅢⅣⅤ".isnumeric()}')
【実行結果】 --- 半角数字('12345') isdecimal: True isdigit: True isnumeric: True --- 上付き数字、下付き数字('⁰₀') isdecimal: False isdigit: True isnumeric: True --- 全角数字('12345') isdecimal: True isdigit: True isnumeric: True --- 漢数字('一弐参肆伍') isdecimal: False isdigit: False isnumeric: True --- ローマ数字('ⅠⅡⅢⅣⅤ') isdecimal: False isdigit: False isnumeric: True
英数字であるかを判定する isalnum
英数字であるかを判定するためには、isalnumメソッドを使用します。
print("=== isalnum ===") print("abc12345".isalnum()) print("abc+-*".isalnum())
【実行結果】 === isalnum === True False
isalnumメソッドでは、文字列中の全ての文字が英数字で、かつ1文字以上の場合はTrue、そうでない場合はFalseを返却します。
isalnumの公式ドキュメントの記載はこちらを参照してください。
英字であるかを判定する isalpha
英字であるかを判定するためには、isalphaメソッドを使用します。
print("=== isalpha ===") print("abcdefgh".isalpha()) print("abc12345".isalpha())
【実行結果】 === isalpha === True False
isalphaメソッドでは、文字列中の全ての文字が英字で、かつ1文字以上の場合はTrue、そうでない場合はFalseを返却します。英字は、Unicodeの文字データベースで”Leter”として定義されているものです。
isalphaの公式ドキュメントの記載はこちらを参照してください。
ASCII文字であるかを判定する isascii
ASCII文字であるかを判定するためには、isasciiメソッドを使用します。isasciiメソッドはPython3.7で追加されたメソッドになります。
print("=== isascii ===") print("abcdefgh".isascii()) print("あいうえお".isascii())
【実行結果】 === isascii === True False
isasciiメソッドでは、文字列が空であるか、文字列の全ての文字がASCII文字である場合はTrue、そうでない場合はFalseを返却します。
isasciiの公式ドキュメントの記載はこちらを参照してください。
小文字であるかを判定する islower
小文字であるかを判定するためには、islowerメソッドを使用します。
print("=== islower ===") print("python".islower()) print("PYTHON".islower())
【実行結果】 === islower === True False
islowerメソッドでは、大文字/小文字の区別のある文字の全てが小文字で、かつ大文字/小文字の区別のある文字が1文字以上である場合はTrue、そうでない場合はFalseを返却します。
ここで「大文字/小文字の区別のある文字」とは、Unicodeの一般カテゴリが”Lu”(Letter, Uppercase: 大文字)、”Ll”(Leter, Lowercase: 小文字)、”Lt”(Letter, Titlecase: 先頭が大文字)のいずれかであるものです。
islowerの公式ドキュメントの記載はこちらを参照してください。
大文字であるかを判定する isupper
大文字であるかを判定するためには、isupperメソッドを使用します。
print("=== isupper ===") print("PYTHON".isupper()) print("python".isupper())
【実行結果】 === isupper === True False
isupperメソッドでは、大文字/小文字の区別のある文字の全てが大文字で、かつ大文字/小文字の区別のある文字が1文字以上である場合はTrue、そうでない場合はFalseを返却します。
ここで「大文字/小文字の区別のある文字」とは、Unicodeの一般カテゴリが”Lu”(Letter, Uppercase: 大文字)、”Ll”(Leter, Lowercase: 小文字)、”Lt”(Letter, Titlecase: 先頭が大文字)のいずれかであるものです。
isupperの公式ドキュメントの記載はこちらを参照してください。
単語の先頭文字だけが大文字の文字列であるかを判定する ~istitleメソッド~
文字列の単語の先頭文字だけが大文字の文字列であるかを判定するには、istitleメソッドを使用します。
print("=== istitle ===") print("Python Program".istitle()) print("python program".istitle())
【実行結果】 === istitle === True False
istitleメソッドでは、文字列がタイトルケース文字列(先頭文字だけが大文字)であり、かつ1文字以上ある場合はTrue、そうでない場合はFalseを返却します。
istitleの公式ドキュメントの記載はこちらを参照してください。
印字可能な文字であるかを判定する isprintable
印字可能な文字であるかを判定するためには、isprintableメソッドを使用します。
print("=== isprintable ===") print("Python Program".isprintable()) print("Python\nProgram".isprintable())
【実行結果】 === isprintable === True False
isprintableメソッドでは、文字列中の全ての文字が印字可能であるか、文字列が空である場合はTrue、そうでない場合はFalseを返却します。
非印字可能文字(印字ができない文字)は、Unicodeで”Other”または”Separator”と定義されている文字でASCII space (0x20)以外のものになります。
isprintableの公式ドキュメントの記載はこちらを参照してください。
空白文字であるかを判定する isspace
空白文字であるかを判定するためには、isspaceメソッドを使用します。
print("=== isspace ===") print(" ".isspace()) print("abcdefgh".isspace())
【実行結果】 === isspace === True False
isspaceメソッドでは、文字列が空白文字からだけからなり、かつ1文字以上の場合はTrue、そうでない場合はFalseを返却します。
Unicodeで一般カテゴリが”Zs”(Separator, space)か、双方向クラスが”WS”, “B”, “S”のいずれかである場合、空白文字(whitespace)となります。双方向クラスと言っているのは、左横書き(左から右に書く)、右横書き(右から左に書く)が混在するテキストのことを言います。
isspaceの公式ドキュメントの記載はこちらを参照してください。
有効な識別子であるかを判定する isidentifier
文字列がPythonで有効な識別子であるかを判定するためには、isidentifierメソッドを使用します。識別子と言っているのは、変数や関数、クラス名で使用できるものです。
print("=== isidentifier ===") print("pytyon_12345".isidentifier()) print("python-12345".isidentifier())
【実行結果】 === isidentifier === True False
isidentifierメソッドでは、文字列が識別子(identifier)及びキーワード(keyword)のページで定義されている有効な識別子である場合はTrue、そうでない場合はFalseを返却します。
詳細な識別子の定義は上記リンク先の公式ドキュメントを参照してください。上記例ではアンダースコア(_)は識別子として使えるのでTrueになりますが、ハイフン(-)は識別子として使えないためFalseとなります。
isidentifierの公式ドキュメントの記載はこちらを参照してください。
予約済みのキーワードであるかを判定する keyword.iskeyword
文字列が予約済みのキーワードであるかを判定するためには、keywordモジュールのiskeywordメソッドを使用します。
from keyword import iskeyword print("python") print(f"identifier: {'python'.isidentifier()}") print(f"iskeyword: {iskeyword('python')}\n") # 予約済みキーワードの場合 print("class") print(f"identifier: {'class'.isidentifier()}") print(f"iskeyword: {iskeyword('class')}")
【実行結果】 python identifier: True iskeyword: False class identifier: True iskeyword: True
Pythonにおいてキーワード(keyword)のページで定義されている識別子は、予約語、またはPythonにおけるキーワード(keyword)として扱われるため通常の識別子として使うことができません。プログラムの文法上で必要になってくるclass, def, if, else等々が該当します。
上記例で’python’という文字列は識別子にできるのでidentifierはTrueですが、予約語ではないためiskeywordはFalseになります。一方で、’class’は予約語であるため、iskeywordもTrueとなります。
keyword.iskeywordの公式ドキュメントの記載はこちらを参照してください。
まとめ
Pythonで文字列に含まれる文字の種類を判定する方法について解説しました。
数値等を判定するメソッドからPythonの識別子やキーワードを判定するメソッドについても紹介しています。文字種類判定のメソッドはいくつもあるので目的に合わせてうまく使い分けてみてください。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。