【Python】部分一致の実装方法を具体例付きで丁寧に解説

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

(最終更新日:2023年7月)

✔当記事はこのような方に向けて書かれています

「python部分一致に関して詳しく知りたい」
「python部分一致の使用方法を学びたい」
「python部分一致の実際の使い方を見てみたい」

✔当記事で伝える内容

  • python部分一致についての基本知識
  • python部分一致の使用方法とその応用
  • python部分一致の具体的な使用例

当記事では、Pythonで部分一致作業の基本から、そのより深い活用方法まで、実例を交えてわかりやすく解説します。

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

筆者プロフィール

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

【現職】プロジェクトマネージャー/SE(元外資系金融機関営業)

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

コミュニケーション × ビジネススキル × 文章力 × プログラミングスキルを活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

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

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

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

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

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

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

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

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

完全一致と部分一致の理解

ここでは、Pythonでの文字列比較における「完全一致」と「部分一致」の理解を深めます。

完全一致と部分一致を理解することは、Pythonでの文字列操作の基礎を学ぶ上で重要です。

  • 完全一致(等価)の理解:’==’と’!=’
  • 部分一致の理解:’in’と’not in’

完全一致(等価)の理解:’==’と’!=’

完全一致(等価)とは、2つの文字列が完全に一致していることを指します。

Pythonでは、’==’ 演算子を用いて2つの文字列が完全に一致しているかどうかの確認が可能。

逆に、’!=’ 演算子を用いて2つの文字列が一致していないかどうかを確認します。

s1 = "Hello, World!"
s2 = "Hello, World!"
print(s1 == s2)  # True

s3 = "Hello, Python!"
print(s1 != s3)  # True

s1とs2は完全一致しているので、’==’演算子の結果はTrue。

一方、s1とs3は一致していないので、’!=’演算子の結果はTrueとなります。

部分一致の理解:’in’と’not in’

部分一致とは、ある文字列が別の文字列の一部と一致していること

Pythonでは、’in’と’not in’演算子を用いて部分一致を確認できます。

s = "Hello, World!"
print("World" in s)  # True
print("Python" not in s)  # True

文字列”World”がsの一部と一致しているため、’in’演算子の結果はTrue。

一方、文字列”Python”はsの一部と一致していないので、’not in’演算子の結果はTrueとなります。

文字列位置の特定

こちらでは、Pythonで文字列の位置を特定する方法について学びます。

文字列の位置を特定することで、必要な情報を抽出したり、不要な部分を削除したりすることが可能です。

  • 文字列の開始と終了を特定:’startswith()’と’endswith()’
  • 文字列の位置取得:’find()’と’rfind()’
  • 特定位置の文字列取得:’index()’と’rindex()’

文字列の開始と終了を特定:’startswith()’と’endswith()’

文字列が特定の文字列で始まっているか、または終わっているかを確認するためには、startswith()endswith()メソッドを使用します。

これらはブール値(TrueまたはFalse)を返す関数です。

s = "Hello, World!"
print(s.startswith("Hello"))  # True
print(s.endswith("!"))  # True
print(s.endswith("Python"))  # False

上記の例では、文字列sは”Hello”で始まり、”!”で終わるため、startswith("Hello")endswith("!")は共にTrueを返します。

一方、endswith("Python")はFalseを返します。

文字列の位置取得:’find()’と’rfind()’

文字列の中から特定の文字列の位置を見つけるためには、find()rfind()メソッドを使用します。

これらは指定した文字列が最初に出現する位置(find())または最後に出現する位置(rfind())を返します。

ただし、該当する文字列が存在しない場合は-1を返します。

s = "Hello, World! World!"
print(s.find("World"))  # 7
print(s.rfind("World"))  # 14
print(s.find("Python"))  # -1

文字列sの中で”World”は最初に7番目の位置に出現し、最後に14番目の位置に出現。

find("World")は7を返し、rfind("World")は14を返します。

一方、”Python”はsの中に存在しないため、find("Python")は-1を返すのです。

find関数については詳しくこちらをご覧ください。

【Python】findメソッドの基本|文字列検索の具体例付き
Pythonのfindメソッドについて知りたいですか?当記事では、Pythonのfindメソッドや関連するメソッドの基本的な使い方や実践的な例を詳細に解説しています。主に実例を中心にご紹介しているので、コードを見ながら手を動かして学べます。初心者の方は必見です。

特定位置の文字列取得:’index()’と’rindex()’

特定の文字列の位置を知りたい場合、’index()’と’rindex()’メソッドも利用できます。

これらは、’find()’と’rfind()’と同様に、指定した文字列が最初に出現する位置(’index()’)または最後に出現する位置(’rindex()’)を返すものです。

しかし、これらは該当する文字列が存在しない場合にエラー(ValueError)を返します。

s = "Hello, World! World!"
print(s.index("World"))  # 7
print(s.rindex("World"))  # 14
try:
    print(s.index("Python"))
except ValueError:
    print("Python is not found in the string.")

index("World")は7を返し、rindex("World")は14を返します。

“Python”はsの中に存在しないため、index("Python")はValueErrorを引き起こしています。

このエラーをキャッチして適切なメッセージを出力しているのです。

大小関係と大文字小文字の扱い

こちらでは、Pythonで文字列の大小関係と大文字小文字の扱いについて学びます。

これらの知識は、文字列をソートしたり、異なるケースを統一したりする際に重要です。

  • 文字列の大小関係(順序)の理解
  • 大文字小文字を区別せずに検索、比較の方法

文字列の大小関係(順序)の理解

Pythonにおいて、文字列の大小(順序)は、ASCII値に基づいて決定されます。

大文字は小文字よりも小さいと評価されるのです。

大小関係は比較演算子(<, >, <=, >=)を使用して判断できます。

print("apple" > "Apple")  # True
print("banana" < "Banana")  # False

“apple”は”Apple”より大きいと評価され、”banana”は”Banana”より小さいと評価されます。

大文字小文字を区別せずに検索、比較の方法

Pythonでは、大小を比較したり文字列を検索したりする際、大文字と小文字を区別しないようにできます。

lower()またはupper()メソッドを使用して、文字列をすべて小文字または大文字に変換する方法です。

s = "Hello, World!"
print(s.lower().startswith("hello"))  # True
print(s.upper().endswith("WORLD!"))  # True

s1 = "Apple"
s2 = "apple"
print(s1.lower() == s2.lower())  # True
print(s1.upper() == s2.upper())  # True

上のコードでは以下のようなことをおこなっています。

  • 文字列sをすべて小文字に変換した後、”hello”で始まるかどうかを確認
  • upperメソッドでは、同様に大文字に変換した後、”WORLD!”で終わるかどうかを確認
  • s1とs2をすべて小文字に変換した後、またはすべて大文字に変換した後で等しいかどうかを比較

正規表現の活用

こちらでは、Pythonでの正規表現の活用について学びます。

正規表現は、特定のパターンに一致する文字列を見つけるための強力なツールです。

  • 正規表現パターンにマッチ:’re.search()’と ‘re.fullmatch()’
  • 正規表現で判定、位置取得:’re.search()’
  • 正規表現で全ての結果を取得:’re.findall()’と ‘re.finditer()’
  • 正規表現で複数の文字列を検索
  • 大文字小文字を区別せずに検索:’re.IGNORECASE’

正規表現についてはこちらの記事でも詳しく解説しています。

【保存版】Pythonの正規表現をコード付きで徹底解説|初心者向け
Pythonの正規表現について知りたいですか?当記事では、Pythonでの正規表現の基本的な使い方や実践的な例を詳細に解説しています。具体例を交えて解説しているで、コードを見ながら実際に手を動かして学べます。初心者の方は必見です。

正規表現パターンにマッチ:’re.search()’と ‘re.fullmatch()’

re.search()関数は、文字列全体を検索し、正規表現と最初に一致した部分のマッチオブジェクトを返します。

re.fullmatch()関数は、正規表現が文字列全体と一致する場合にのみマッチオブジェクトを返すものです。

import re

s = "Hello, World!"
pattern = r"\bWorld\b"

search_result = re.search(pattern, s)
if search_result:
    print(f"'re.search()' で見つかりました: {search_result.group()}")

fullmatch_result = re.fullmatch(pattern, s)
if fullmatch_result:
    print(f"'re.fullmatch()' で見つかりました: {fullmatch_result.group()}")
else:
    print("'re.fullmatch()' は一致しませんでした。")

この例では、”World”の前後に単語の境界(\b)があるパターンを検索。

re.search()は文字列の一部がパターンと一致しているのでマッチオブジェクトを返しますが、re.fullmatch()は文字列全体がパターンと一致しないためマッチオブジェクトを返しません。

正規表現で判定、位置取得:’re.search()’

既に触れたように、re.search()は正規表現と一致する文字列の位置も特定できます。

マッチオブジェクトのstart()およびend()メソッドを使用すると、マッチした部分の開始位置と終了位置を取得可能です。

import re

s = "Hello, World!"
pattern = r"\bWorld\b"

search_result = re.search(pattern, s)
if search_result:
    print(f"'re.search()' で見つかりました: {search_result.group()}")
    print(f"一致箇所は位置 {search_result.start()} から位置 {search_result.end()} までです")

re.search()はパターンが文字列sに一致するかどうかを検索し、一致する部分の開始位置と終了位置を表示しています。

正規表現で全ての結果を取得:’re.findall()’と ‘re.finditer()’

re.findall()re.finditer()は、正規表現と一致する文字列の全てのインスタンスを見つけるために使用します。

re.findall()は一致するすべての部分文字列のリストを返し、re.finditer()はマッチオブジェクトのイテレータを返すものです。

import re

s = "Hello, World! The world is round."
pattern = r"\bworld\b"

findall_result = re.findall(pattern, s, re.IGNORECASE)
print(f"'re.findall()' で見つかりました: {findall_result}")

finditer_result = re.finditer(pattern, s, re.IGNORECASE)
print("'re.finditer()' で見つかりました: ")
for match in finditer_result:
    print(f"一致箇所: {match.group()}, 開始位置は {match.start()} で終了位置は {match.end()} です")

re.findall()は”world”(大文字小文字を無視)のすべてのインスタンスのリストを返し、re.finditer()はそれぞれのインスタンスのマッチオブジェクトをイテレータとして返しています。

正規表現で複数の文字列を検索

正規表現を使用すると、複数の文字列を同時に検索することも可能です。

これはパイプ記号|を使用して、検索したい複数のパターンを分離します。

import re

s = "Python, Java, and JavaScript are popular programming languages."
pattern = r"\bPython\b|\bJava\b|\bJavaScript\b"

matches = re.findall(pattern, s)
print(f"一致箇所: {matches}")

“Python”、”Java”、”JavaScript”のそれぞれの単語を文字列sから検索しています。

大文字小文字を区別せずに検索:’re.IGNORECASE’

re.IGNORECASEフラグを使用すると、大文字小文字を無視した検索が可能です。

これは、大小文字の違いを無視してパターンをマッチさせるために使用します。

import re

s = "Hello, World! The world is round."
pattern = r"\bworld\b"

matches = re.findall(pattern, s, re.IGNORECASE)
print(f"一致箇所: {matches}")

re.IGNORECASEフラグを使用して、文字列s内の”world”(大文字小文字を無視)を全て検索しています。

まとめ

最後に、Pythonでの文字列操作と正規表現の基本を学びました。

これらのツールは、テキストの解析、データクレンジング、パターンマッチングなど、さまざまなシナリオで役立ちます。

当記事では文字列操作について、ほかにも多数の記事を用意しています。

【保存版】Pythonで文字列を含むかどうかを判定する方法
Pythonで「文字列」を含むかどうかを判別する方法が知りたいですか?文字列はPythonの操作を行うための基本的なツールで、別の文字列での検索や置換など、さまざまな方法で利用できます。当記事ではPythonでの文字列含む操作方法を具体的なコードと共に丁寧に解説しています。特にPython初心者の方は必見です。
【簡単】Pythonで文字列を抽出する方法の具体例付きで解説
Pythonで文字列を抽出する方法について知りたいですか?Pythonはプログラミング言語の一つで、文字列操作や抽出が可能です。当記事では、Pythonを使用して文字列を抽出する具体的な方法をコードと共に詳しく解説しています。特にPython初心者の方は必見です。

手を動かしながら、ひとつずつマスターしていきましょう。

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