【Python】文字列の大文字、小文字を判定する(isupper, islower)

Python 文字列 組込み型

文字列中の英字が大文字か小文字かを判定するには、str型(文字列)のメソッドであるisupper()、islower()を使います。
また、その文字列が英数字であるか、英字であるか、ASCII文字か、タイトルケースかを判定する方法についても併せて解説します。

大文字かどうかを判定(isupper)

str.isupper()を使います。
文字列中の英字全てが大文字かつ1文字以上の場合はTrue、そうでない場合はFalseを返します。

以下に例を示します。

# 全て英字大文字
>>> 'ABCDE'.isupper()
True

# 全て英字小文字
>>> 'abcde'.isupper()
False

# 英字 大文字・小文字混在
>>> 'Abcde'.isupper()
False

# 英数字混在
>>> 'ABC12'.isupper()
True

# 英数字以外も混在
>>> 'Aa12\*'.isupper()
False

小文字かどうかを判定(islower)

str.islower()を使います。
文字列中の英字全てが小文字かつ1文字以上ある場合はTrue、そうでない場合はFalseを返します。

# 全て英字大文字
>>> 'ABCDE'.islower()
False

# 全て英字小文字
>>> 'abcde'.islower()
True

# 英字 大文字・小文字混在
>>> 'Abcde'.islower()
False

# 英数字混在
>>> 'abc12'.islower()
True

# 英数字も混在
>>> 'Aa12\*'.islower()
False

英数字であることを判定(isalnum)

str.isalnum()を使います。
文字列中の全ての文字が英数字かつ1文字以上ある場合はTrue、そうでない場合はFalseを返します。

# 全て英字大文字
>>> 'ABCDE'.isalnum()
True

# 全て英字小文字
>>> 'abcde'.isalnum()
True

# 英字 大文字・小文字混在
>>> 'Abcde'.isalnum()
True

# 英数字混在
>>> 'abc12'.isalnum()
True

# 英数字以外混在
>>> 'Aa12\*'.isalnum()
False

尚、このメソッドは対象となる文字列が以下のいずれかがTrueを返せば英数字と判定されます。

  • str.isalpha()
  • str.isdecimal()
  • str.isdigit()
  • str.isnumeric()

よって下記のように書き換え可能です。

>>> def func(s):
... return any([s.isalpha(), s.isdecimal(), s.isdigit(), s.isnumeric()])

英字かどうかを判定(isalpha)

str.isalpha()を使います。
文字列中の全ての文字が英字かつ1文字以上ある場合はTrue、そうでない場合はFalseを返します。

# 全て英字大文字
>>> 'ABCDE'.isalpha()
True

# 全て英字小文字
>>> 'abced'.isalpha()
True

# 英字 大文字・小文字混在
>>> 'Abced'.isalpha()
True

# 英数字混在
>>> 'abc12'.isalpha()
False

# 英数字以外混在
>>> 'Aa12\*'.isalpha()
False

ASCII文字列かどうかを判定(isascii)

str.isascii()を使います。
文字列が空、または全ての文字が ASCII( U+0000 〜 U+007F) である場合はTrue、それ以外の場合はFalseを返します。
Python3.7から追加されたメソッドなのでバージョンに注意。

# 全て英字大文字
>>> 'ABCDE'.isascii()
True

# 全て英字小文字
>>> 'abced'.isascii()
True

# 英字 大文字・小文字混在
>>> 'abc12'.isascii()
True

# 英数字以外混在
>>> 'Aa12\*'.isascii()
True

# ASCIIコード以外
>>> 'あ'.isascii()
False

タイトルケース文字列かどうかを判定(istitle)

str.istitle()を使います。
※タイトルケース: 文の最初以外の単語についても先頭文字を大文字にすること
以下の2つを満たす場合にTrueを返します。

  • 大文字は、英字以外の文字の後のみに置かれる
  • 小文字は、英字の後にだけ続く

よって、以下の点に注意が必要です。

  • アポストロフィー(’)の後の文字が小文字だとタイトルケースと判定されません(例:Tom’s → Tom’S)
  • 翻訳業界などでは4文字未満の前置詞や接続詞(on, theなど)はこれを適用しないルールがあるようですが、このメソッドはこのルールが適用されません

以下に例を示します。

# 文章の最初の文字のみ大文字
>>> "Tom's watch is on the table.".istitle()
False

# istitle()でTrueとなるタイトルケース
>>> "Tom'S Watch Is On The Table.".istitle()
True

# アポストロフィー(')の後の文字が小文字だとFalse
>>> "Tom's Watch Is On The Table.".istitle()
False

# onやtheの先頭文字が小文字だとFalse
>>> "Tom'S Watch Is on the Table.".istitle()
False

英文字について

ここでの英字とは、大小文字の区別のある文字のことを指し、一般カテゴリプロパティが

  • “Lu” (Letter, uppercase (大文字))
  • “Ll” (Letter, lowercase (小文字))
  • “Lt” (Letter、titlecase (先頭が大文字))

のいずれかであるものです。(こちらの公式リファレンスを参照)

確認環境

  • OS: Ubuntu20.04LTS
  • Python3.9.1

まとめ

今回は、文字列中の英字の大文字、小文字を判定する方法、および英数字/英字/ASCII文字/タイトルケースの判定方法についてまとめました。

参考書籍

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

シェアする
ひびきをフォローする
Hbk project