(最終更新月:2023年6月)
✔このような方におすすめの記事です
「Pythonで文字列の比較方法を知りたい」
「Pythonの比較演算子を使ったコード例が見たい」
「文字列比較の応用方法を学びたい」
✔本記事を通してお伝えする内容
- Pythonを使った文字列の比較基本
- 文字列比較の実践的な書き方とその応用方法
- Pythonによる文字列比較のコード例
本記事では、Pythonでの文字列比較の基礎から、応用までを具体的なコード例を用いてわかりやすく解説しています。
ぜひ最後までご覧ください。
基本的な文字列比較
ここでは、Pythonでの文字列比較の基本について説明します。
等価性のチェックから部分一致の確認、順序比較まで、さまざまな比較方法を探りましょう。
- 等価・不等価の比較: ==, !=
- 部分一致の比較: in, not in
- 先頭・末尾の一致(前方一致・後方一致):startswith(),endswith()
- 文字列の順序比較
等価・不等価の比較: ==, !=
Pythonでは、2つの文字列が等しいかどうかを判断するために ‘==’ 演算子を使用します。
逆に’!=’ 演算子は、2つの文字列が等しくないことを判断します。
例えば以下のとおりです。
str1 = 'Python'
str2 = 'Python'
str3 = 'python'
print(str1 == str2) # 出力: True
print(str1 == str3) # 出力: False
print(str1 != str3) # 出力: True
上記の例では、’Python’と’python’は大文字小文字が異なるため、等しくありません。
部分一致の比較: in, not in
部分一致の比較を行うには、 ‘in’ や ‘not in’ 演算子を使用してください。
ある文字列が別の文字列内に存在するかどうかを判断します。
例えば、以下のようになります。
str1 = 'Python programming'
str2 = 'Python'
str3 = 'Java'
print(str2 in str1)
# 出力: True
print(str3 in str1)
# 出力: False
上記の例では、’Python’は’Python programming’の中に存在していますが、’Java’は存在していません。
これらの基本的な文字列比較方法は、Pythonでのプログラミングで頻繁に使用されます。
先頭・末尾の一致(前方一致・後方一致): startswith(), endswith()
文字列の先頭または末尾が特定のパターンで始まっているか、または終わっているかを確認する場合には、startswith() および endswith() メソッドを使用しましょう。
この機能は以下のような場面で役立ちます。
- ファイルの拡張子を調べる
- URLが特定のプロトコル(例えば、httpまたはhttps)で始まるかどうかを調べる
例はこちらです。
filename = 'example.py'
print(filename.startswith('ex'))
# 出力: True
print(filename.endswith('.py'))
# 出力: True
上記の例では、’example.py’ は ‘ex’ で始まり、’.py’ で終わっているため、両方の条件とも True を返します。
文字列の順序比較
Pythonでは、'<‘や’>’といった比較演算子を使用して文字列の順序を比較できます。
これは文字列が辞書順(アルファベット順)であるかどうかを確認する際に役立ちます。
str1 = 'Apple'
str2 = 'Banana'
str3 = 'Cherry'
print(str1 < str2)
# 出力: True
print(str2 > str3)
# 出力: False
上記の例では、’Apple’は’Banana’よりも辞書順で先に来るため、str1 < str2 は True を返します。
一方、’Banana’は’Cherry’よりも辞書順で後ろに来るため、str2 > str3 は False を返すのです。
大文字小文字を無視した比較
ここでは、Pythonで大文字と小文字を無視して文字列を比較する方法について説明します。
英字での比較をおこなうさいは、大文字・小文字は必ず意識しましょう。
- lowerとupperメソッドによる比較
- casefoldメソッドによる高度な比較
lowerとupperメソッドによる比較
Pythonのlower
とupper
メソッドは、文字列を全て小文字または大文字に変換するのに使われます。
この変換後の文字列を比較することで、大文字小文字を無視した比較が可能です。
具体的な使用方法を見てみましょう。
str1 = "Python"
str2 = "python"
# lowerメソッドを使用した比較
if str1.lower() == str2.lower():
print("Strings are equal ignoring case.")
このコードでは、二つの文字列str1
とstr2
を小文字に変換した上で比較しています。
casefoldメソッドによる高度な比較
別の方法として、Pythonのcasefold
メソッドがあります。
このメソッドは、特定の文字(例えばドイツ語の大文字エスツェット “ẞ” など)を小文字にする際に、より適切な比較を可能にします。
lower
やupper
メソッドと比べて、より広範な言語の文字に対応しています。
str1 = "Straße"
str2 = "strasse"
# casefoldメソッドを使用した比較
if str1.casefold() == str2.casefold():
print("Strings are equal ignoring case.")
このコードでは、ドイツ語の大文字エスツェットを含む文字列を比較しています。
casefold
メソッドを使うことで、特殊な文字でも大文字小文字を無視した比較が可能となります。
正規表現を利用した文字列比較
ここでは、Pythonの正規表現を使用した文字列比較について説明します。
正規表現は、文字列のパターンマッチングとデータ抽出をおこなう強力なツールです。
- 基本的な正規表現の比較: re.search()
- 完全一致の正規表現比較: re.full
- 大文字小文字を無視した正規表現比較: re.IGNORECASE
基本的な正規表現の比較: re.search()
Pythonの re
モジュールに含まれる search()
関数は、文字列が特定の正規表現パターンに一致するかどうかを確認するために使用されます。
この関数は、パターンが文字列の任意の位置にマッチするかを確認します。
import re
str1 = 'Python is fun'
pattern = 'fun'
match = re.search(pattern, str1)
if match:
print('Match found') # 出力: Match found
else:
print('Match not found')
この例では、文字列 ‘Python is fun’ がパターン ‘fun’ に一致するかどうかを確認しています。
完全一致の正規表現比較: re.fullmatch()
完全一致の比較には、 re.fullmatch()
を使いましょう。
パターンが文字列全体と一致するかどうかを確認しています。
import re
str1 = 'Python'
pattern = 'Python'
match = re.fullmatch(pattern, str1)
if match:
print('Full match found') # 出力: Full match found
else:
print('Full match not found')
上記の例では、文字列全体がパターン ‘Python’ と完全に一致するかどうかを確認しています。
大文字小文字を無視した正規表現比較: re.IGNORECASE
大文字と小文字を無視し、正規表現で文字列を比較するには、re
モジュールの IGNORECASE
フラグが使用可能です。
大文字と小文字の区別なく、パターンマッチングをおこないます。
import re
str1 = 'Python'
pattern = 'python'
match = re.search(pattern, str1, re.IGNORECASE)
if match:
print('Match found') # 出力: Match found
else:
print('Match not found')
この例では、大文字と小文字を区別せずに ‘Python’ と ‘python’ を比較しています。
日本語を含む文字列の比較と注意点
Pythonによる日本語の比較は、英語の比較とは異なるいくつかの問題を持っています。
その理由は意味としては同じでも、文字づらが異なれば、異なる文字コードを持つからです。
- 全角と半角
- ひらがなとカタカナ
- 音声記号の有無
str1 = 'Python'
str2 = 'パイソン'
print(str1 == str2)
# 出力: False
比較演算子 ‘==’ と is 演算子の違い
Pythonの == 演算子と is 演算子は似ていますが、異なる動作をします。
- == 演算子:値が等しいかどうかをチェック
- is 演算子:オブジェクトが同一(同じメモリを指している)かどうかをチェック
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 == list2)
# 出力: True
print(list1 is list2)
# 出力: False
print(list1 is list3)
# 出力: True
上記の例ではlist1とlist2は等しい値を持っていますが、異なるオブジェクトなので is
演算子はFalseを返します。
一方、list1とlist3は同一のオブジェクトを指しているため、is
演算子はTrueを返すのです。
まとめ
当記事では以下の内容を学習しました。
- 文字列の比較は、幅広い場面で使われる
- 大文字小文字を無視した比較や正規表現を用いた比較は、柔軟な文字列の操作を可能にする
- 日本語を含む文字列の比較については、適切なライブラリの利用が推奨される
- ‘==’ と ‘is’ は、値の比較とオブジェクトの同一性の確認という、異なる目的のために使われる
それぞれの比較手法の理解と適切な使用は、Pythonプログラミングにおいて非常に重要なスキルです。
これにより、あなたのコードはよりロバストで効率的になり、あらゆる種類の文字列操作に対応することができるようになります。