コンテンツにスキップ

str.contains メソッドを使って文字列の中に指定のパターンが含まれているか確認する方法

[

Pythonの文字列に特定の文字列が含まれるかどうかを確認する方法

プログラミングが初めての方やPython以外の言語から来た方は、Pythonで文字列に特定の文字列が含まれているかどうかを確認する最良の方法を探しているかもしれません。

このチュートリアルでは、Pythonicな方法でこのタスクに取り組む方法である、メンバーシップ演算子inを使用します。さらに、関連性はあるものの、異なるユースケースに対して適切な文字列メソッドを特定する方法も学びます。

最後に、pandasの列で部分文字列を検索する方法も学びます。これは、CSVファイルからのデータを検索する必要がある場合に役立ちます。次のセクションで学ぶ方法を使用することもできますが、表形式のデータを扱う場合は、データをpandasのDataFrameにロードして部分文字列を検索する方が良いでしょう。

Pythonの文字列に特定の文字列が含まれることを確認する方法

Python

raw_file_content = """Hi there and welcome.
This is a special hidden file with a SECRET secret.
I don't want to tell you The Secret,
but I do want to secretly tell you that I have one."""
"secret" in raw_file_content

inメンバーシップ演算子は、文字列内に部分文字列が存在するかどうかを素早く読みやすい方法で確認する方法を提供します。コードの行を見ると、ほとんど英語のように読まれることに気付くかもしれません。

Python

"secret" not in raw_file_content

部分文字列 "secret"raw_file_content に存在するため、not in 演算子は False を返します。

  • 文字列が見つかった場合はTrue
  • 文字列が見つからなかった場合はFalse

Python

if "secret" in raw_file_content:
print("Found!")

このコード片では、メンバーシップ演算子を使用して"secret"raw_file_content の部分文字列であるかどうかをチェックしています。もし部分文字列が見つかれば、メッセージを[ターミナル](https:/

大文字小文字を区別せずに一般化する

デフォルトでは、文字列のメンバーシップ演算子 in は大文字と小文字を区別します。例えば、次のような場合は False を返します。

Python

"secret" in "This is a Secret"

この場合、"This is a Secret" の中には小文字の "secret" が存在しますが、大文字と小文字が一致しないため、False を返します。

しかし、「大文字小文字を区別しない」チェックを行いたい場合があるかもしれません。その場合、文字列のメソッド lower()upper() を使用して文字列を統一することができます。

下記の例では、raw_file_content"secret" 文字列をすべて小文字に変換することで、大文字小文字を区別せずに同じ文字列として比較しています。

Python

raw_file_content = "This is a Secret"
"secret" in raw_file_content.lower()

このコードは、大文字小文字を区別しない in チェックを行っており、結果は True になります。

大文字小文字を区別しないチェックが必要な場合は、文字列を統一するために、lower()upper() メソッドを使用してから in チェックを行うことをお勧めします。

部分文字列についてさらに学ぶ

in メンバーシップ演算子は、文字列に特定の部分文字列が含まれているかどうかをチェックするための便利な機能です。しかし、文字列に関連する他の操作も学ぶと便利です。

例えば、特定の部分文字列が文字列の先頭に存在するかどうかをチェックするには、メソッド startswith() を使用します。次の例で確認してみましょう。

Python

title = "Python String Contains Substring"
title.startswith("Python")

このコードでは、変数 title の文字列が "Python" で始まるかどうかをチェックしています。結果は True になります。

また、特定の部分文字列が文字列の末尾に存在するかどうかをチェックするには、メソッド endswith() を使用します。次の例を見てみましょう。

Python

filename = "script.py"
filename.endswith(".py")

このコードでは、変数 filename の文字列が .py で終わっているかどうかをチェックしています。結果は True になります。

他にも、文字列の特定の部分文字列が存在する位置を知りたい場合は、メソッド find()index() を使用することができます。

これらの文字列メソッドについては、公式の文字列メソッドのドキュメントを参照してください。

正規表現を使用して条件付きの部分文字列を検索する

文字列内の特定の部分文字列を探すだけでなく、条件に基づいて検索を行いたい場合は、正規表現を使用することができます。Pythonでは、reモジュールを使用して正規表現を扱うことができます。

以下の例では、正規表現を使用して数字のみから成る部分文字列を検索します。

Python

import re
text = "There are 123 apples and 456 bananas."
pattern = r"\d+"
matches = re.findall(pattern, text)
print(matches)

このコードでは、re.findall() を使用して正規表現パターン "\d+" に一致するすべての部分文字列を検索しています。結果は、数字のみから成る部分文字列 ['123', '456'] になります。

正規表現は、部分文字列をより複雑に検索するための強力なツールです。正規表現について詳しく学ぶには、公式の正規表現 HOWTOを参照してください。

pandasのDataFrame列で部分文字列を検索する

もしCSVファイルからのデータを検索する必要がある場合は、pandasのDataFrameを使用して部分文字列を検索する方法も学びましょう。pandasは、表形式のデータを簡単に操作するための強力なツールです。

まず、pandasをインストールし、データをDataFrameに読み込みます。

Python

import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie', 'Dave'],
'email': ['alice@example.com', 'bob@example.com', 'charlie@example.com', 'dave@example.com']
}
df = pd.DataFrame(data)

この例では、名前とメールアドレスを含む辞書型のデータを作成し、それを使用してDataFrameを作成しています。

次に、DataFrameの列で部分文字列を検索する方法を見てみましょう。str.contains() メソッドを使用すると、特定の部分文字列が列の各要素に含まれるかどうかを確認できます。

Python

df['name'].str.contains('a')

このコードでは、DataFrameの “name” 列に含まれる各要素に対して、部分文字列 'a' が含まれているかどうかを確認しています。結果は、布