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

Python 文字列 組込み型

文字列中の英字が大文字か小文字かを判定するには、str型(文字列)のメソッドであるisupper()やislower()を使います。
今回はこれらに加え、英数字や英字、ASCII文字、タイトルケースを判定する方法についてもまとめます。

確認環境

  • OS: Ubuntu16.04LTS
  • Python3.7.2@Anaconda

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

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

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

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

のいずれかであるものです。(こちらの公式リファレンスを参照)
以降にでてくる英字も同様です。

以下に例を示します

# 全て英字大文字
>>> '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


尚、このメソッドは文字strが以下のいずれかが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

まとめ

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

Learn more...

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

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