【簡単】Pythonで文字列を比較する方法やその実コードを紹介

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年6月)

✔このような方におすすめの記事です

「Pythonで文字列の比較方法を知りたい」

「Pythonの比較演算子を使ったコード例が見たい」

「文字列比較の応用方法を学びたい」

✔本記事を通してお伝えする内容

  • Pythonを使った文字列の比較基本
  • 文字列比較の実践的な書き方とその応用方法
  • Pythonによる文字列比較のコード例

本記事では、Pythonでの文字列比較の基礎から、応用までを具体的なコード例を用いてわかりやすく解説しています。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

基本的な文字列比較

ここでは、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のlowerupperメソッドは、文字列を全て小文字または大文字に変換するのに使われます。

この変換後の文字列を比較することで、大文字小文字を無視した比較が可能です。

具体的な使用方法を見てみましょう。

str1 = "Python"
str2 = "python"

# lowerメソッドを使用した比較
if str1.lower() == str2.lower():
    print("Strings are equal ignoring case.")

このコードでは、二つの文字列str1str2を小文字に変換した上で比較しています。

casefoldメソッドによる高度な比較

別の方法として、Pythonのcasefoldメソッドがあります。

このメソッドは、特定の文字(例えばドイツ語の大文字エスツェット “ẞ” など)を小文字にする際に、より適切な比較を可能にします。

lowerupperメソッドと比べて、より広範な言語の文字に対応しています。

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プログラミングにおいて非常に重要なスキルです。

これにより、あなたのコードはよりロバストで効率的になり、あらゆる種類の文字列操作に対応することができるようになります。

タイトルとURLをコピーしました