(最終更新日:2023年7月)
✔当記事はこのような方に向けて書かれています
「python部分一致に関して詳しく知りたい」
「python部分一致の使用方法を学びたい」
「python部分一致の実際の使い方を見てみたい」
✔当記事で伝える内容
- python部分一致についての基本知識
- python部分一致の使用方法とその応用
- python部分一致の具体的な使用例
当記事では、Pythonで部分一致作業の基本から、そのより深い活用方法まで、実例を交えてわかりやすく解説します。
ぜひ最後までご覧ください。
完全一致と部分一致の理解
ここでは、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関数については詳しくこちらをご覧ください。
特定位置の文字列取得:’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’
正規表現についてはこちらの記事でも詳しく解説しています。
正規表現パターンにマッチ:’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での文字列操作と正規表現の基本を学びました。
これらのツールは、テキストの解析、データクレンジング、パターンマッチングなど、さまざまなシナリオで役立ちます。
当記事では文字列操作について、ほかにも多数の記事を用意しています。
手を動かしながら、ひとつずつマスターしていきましょう。