Python 文字列に部分文字列が含まれているかどうかを確認する 7 つの方法

Python 文字列に部分文字列が含まれているかどうかを確認する 7 つの方法

文字列の操作は、Python の一般的なタスクです。多くの場合、文字列に別の文字列が含まれているかどうかを確認する必要があります。

Python 文字列に部分文字列が含まれているかどうかを確認する最も簡単な方法には、「in」演算子、find() 関数、index() メソッドなどがあります。より複雑なシナリオは、正規表現または Pandas などの外部ライブラリを使用して解決できます。

この記事では次のことを説明します。

  • 4つの簡単な方法

  • 2 つのさらに複雑な正規表現関数

  • Pandasライブラリを使用したメソッド

構文と使用法の例を通じて各テクニックを学習します。さまざまな要件にどの方法が最適であるかについてのヒントも得られます。

始めましょう!

目次

Python 文字列の基礎

Python の文字列は、テキストベースのデータを表すために使用される文字のシーケンスです。文字、数字、記号、空白を含めることができます。

これは Python の組み込みデータ型の 1 つであり、次のいずれかを使用して作成できます。

  • 一重引用符 (' ')

  • 二重引用符 (" ")

  • 三重引用符 ("' ''' または """ """)

文字列にはインデックスが付けられます。つまり、インデックス番号を参照することで特定の文字にアクセスできます。開始インデックスは 0 です。これは、文字列の最初の文字のインデックスが 0、2 番目の文字のインデックスが 1 であることを意味します。

次に、部分文字列をチェックする方法を見ていきます。

部分文字列をチェックする 4 つの最も簡単な方法

Python には、より大きな文字列内に特定の部分文字列が存在するかどうかを確認する方法が多数用意されています。他のものよりも複雑なものもあります。最も基本的なチェックの場合、最も単純な方法は、in 演算子または 3 つの文字列メソッドのいずれかです。

  1. 演算子内

  2. find() メソッド

  3. Index() メソッド

  4. count() メソッド

Python 文字列に部分文字列が含まれているかどうかを確認する 7 つの方法

1. オペレータ内

Python の「in」演算子は、ある文字列が別の文字列内に存在するかどうかを確認するためのシンプルで直感的な方法です。この演算子はメンバーシップをチェックし、ブール値を返します。

  • サブ文字列がメイン文字列内で見つかった場合は True

  • そうでない場合は false

以下にサンプルコードを示します。

s = "Hello, world!"
sub = "world"
result = sub in s
print(result)  # Output: True

「in」演算子では大文字と小文字が区別されます。これは、小文字と大文字を別のものとして扱うことを意味します。上記のコードでは部分文字列「hello」が見つからないため、演算子は false を返します。

大文字と小文字を区別しないチェックを実行する場合は、チェックを実行する前に、メイン文字列とサブ文字列の両方を同じ大文字と小文字に変換できます。

s = "Hello, world!"
sub = "hello"
result = sub.lower() in s.lower()
print(result)  # Output: True

in 演算子の欠点は、メイン文字列内のサブ文字列の位置を提供しないことです。そのためには、このセクションの別の方法が必要になります。読む…

2. Find() メソッド

find ()メソッドは、部分文字列が出現する最初のインデックスを返します。部分文字列が見つからない場合は-1 を返します。

文字列sに対してfind()メソッドを呼び出し、部分文字列sub を引数として渡します。以下に例を示します。

s = "Hello, world!"
sub = "world"
index = s.find(sub)

if index != -1:
     print("Found at index:", index)  # Output: Found at index: 7
else:
     print("Not found")

オプションで開始インデックスまたは終了インデックスを指定して、検索を制限できます。この方法の欠点は、最初の出現で停止してしまうことです。

3. Index() メソッド

Index ()メソッドはfind()メソッドとよく似ていますが、部分文字列が見つからない場合にValueError を発生させる点が異なります。これは、呼び出しを Try/Except セクションでラップする必要があることを意味します。

Index()メソッドを使用するには、文字列sに対してこのメ​​ソッドを呼び出し、部分文字列sub を引数として渡します。

s = "Hello, world!"
sub = "world"

try: 
     index = s.index(sub)
     print("Found at index:", index)  # Output: Found at index: 7
except ValueError:
     print("Not found")

このメソッドは、テキスト内の最初の部分文字列でも停止します。

4.Count()メソッド

.count ()メソッドは、元の文字列内に部分文字列が出現する回数をカウントします。このカウントを表す整数を返します。サブ文字列がメイン文字列内に見つからない場合は、0 を返します。

以下は、「Hello, world!」というテキスト内の文字「o」を検索する簡単な例です。

s = "Hello, world!"
sub = "o"
print(s.count(sub))  # Output:2

文字列を正規表現と照合する 2 つの方法

正規表現(regex)の使用は、前のセクションの方法よりも少し複雑です。ただし、扱っているテキストを検索および分析するためのより多くのオプションが提供されます。

reモジュール内で最も簡単な方法は次の 2 つです。

  1. 検索()

  2. findall()

Python 文字列に部分文字列が含まれているかどうかを確認する 7 つの方法

1. re.Search()

reモジュールのsearch ()関数は、指定された文字列内のパターンを検索し、一致するものが見つかった場合は一致オブジェクトを返します。それ以外の場合は、Noneを返します。

デフォルトでは、関数は大文字と小文字を区別します。re.IgnoreCaseフラグを使用すると、大文字と小文字の区別を回避できます。

文字列が見つかるかどうかに基づいて条件ステートメントを使用する簡単な例を次に示します。

import re
pattern = "python"
text = "I love Python programming"
match = re.search(pattern, text, re.IGNORECASE)

if match: 
     print("Pattern found")
else:
     print("Pattern not found")

このメソッドは最初の一致を見つけて検索を停止することに注意してください。すべての一致を見つけたい場合は、このリストの次のリストが最適です。

2.re.Findall()

このメソッドは、指定された文字列内で出現する検索パターンをすべて検索し、すべての一致を含むリストを返します。

この例では、文字列内の 1 つ以上の数字と一致するパターンを使用します。テキスト文字列「123, 456, 789」には、3 つの一連の数字が含まれています。

import re 

pattern = "d+" 
text = "123, 456, 789" 
numbers = re.findall(pattern, text) 

print(numbers)

これはサンプル コードからの答えです: ['123', '456', '789']。

パンダで部分文字列を検索する方法

Python 文字列に部分文字列が含まれているかどうかを確認する 7 つの方法

Pandas は、Python 用の人気のあるオープンソースのデータ分析および操作ライブラリです。構造化データの操作と分析に必要なデータ構造と関数を提供します。

Pandasが提供する主要なデータ構造の 1 つはDataFrame です。この多用途のデータ構造を使用して、ある文字列の中に別の文字列があるかどうかを確認できます。

Pandas の利点は、他のプログラミング言語では広範囲に渡って記述する必要があるコードのパッケージを提供することです。具体的には、contains 関数内には多くの機能が詰め込まれています。

Pandas の str.contains() 関数

str.contains ()メソッドは、指定されたパターンまたは正規表現が DataFrame 列の文字列内に含まれているかどうかをテストします。

ライブラリをインポートし、文字列のリスト内で文字列を検索する例を次に示します。

import pandas as pd

# Creating a sample DataFrame 
data = {'fruits': ['apple', 'banana', 'cherry', 'watermelon', 'orange']} 
df = pd.DataFrame(data) 

# Searching for substrings in the 'fruits' column 
has_an = df['fruits'].str.contains(pat='an', regex=False)

# Filtering the DataFrame based on the search results 
filtered_df = df[has_an] 
print(filtered_df)

この例では、「fruits」列で部分文字列「an」を検索し、それに応じてデータフレームをフィルタリングします。出力は次のようになります。

  • バナナ1本

  • 4 オレンジ

Pandas で何ができるかの例をさらに探している場合は、このビデオをチェックしてください。

Python で特定のメソッドを選択するためのヒント

方法の選択は、タスクの特定の要件に大きく依存します。

この記事で学んだ方法の 1 つを選択する 4 つの理由と、このブログの他の場所で学ぶボーナスの方法が 1 つあります。

  1. 処理速度

  2. 部分文字列の位置を知る必要があります

  3. 部分文字列の出現数を知る必要があります

  4. 複雑なパターンを照合したい

  5. テキスト分析の実行

1. 処理速度

Python 文字列に部分文字列が含まれているかどうかを確認する 7 つの方法

単純に文字列内に部分文字列が存在するかどうかを知りたい場合は、「in」演算子が最適な選択です。

この目的では、シンプルで直感的かつ高速です。ただし、部分文字列の位置や数に関する情報は提供されません。

2. 部分文字列の位置

文字列内で最初に出現する部分文字列の位置を知る必要がある場合は、.find()メソッドまたは.index()メソッドを使用します。

どちらも、最初に出現した部分文字列のインデックスを返します。

3. 部分文字列の数

文字列内に部分文字列が何回出現するかを知りたい場合は、.count()メソッドを使用します。

4. 複雑なパターン

複雑なパターンに一致する必要がある場合、または大文字と小文字を区別しない検索を実行する必要がある場合は、正規表現が最も柔軟です。re.search ()関数は、単純な部分文字列を超えるパターンを処理でき、大文字と小文字を区別しない検索を簡単に実行できます。

ただし、正規表現は単純な部分文字列のチェックには過剰になる可能性があり、また、使用と保守が遅くなり、複雑になる可能性もあります。

5. テキスト分析の実行

textblob ライブラリの操作方法を説明するPython でのテキスト分析に関する記事をご覧ください。

.tags関数を使用して品詞を確認したり、.ngram関数を使用して文書内で頻繁に一緒に出現する単語を検索したりできます。

最終的な考え

単語または文字列オブジェクトが別のオブジェクトに含まれているかどうかを確認する 7 つの方法を学習しました。これらには、メンバーシップ演算子、組み込み関数、正規表現、および Pandas 関数が含まれます。

各方法は一部の状況では正しいですが、すべての場合に正しいわけではありません。この記事をチートシートとして使用して、Python プログラミング言語をマスターし、文字列分析タスクに最適なソリューションを使用してください。

万能の方法はないということを覚えておいてください。各アプローチには独自の利点と癖があるため、自分のスタイルまたは解決しようとしている特定の問題に合ったものを自由に選択してください。結局のところ、Python はユーザーの生活を楽にすることが目的なので、その柔軟性を活用してください。


Python における Self とは: 実際の例

Python における Self とは: 実際の例

Python における Self とは: 実際の例

RでRDSファイルを保存してロードする方法

RでRDSファイルを保存してロードする方法

R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。

最初の N 営業日の再考 – DAX コーディング言語ソリューション

最初の N 営業日の再考 – DAX コーディング言語ソリューション

この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。

LuckyTemplates のフィルター コンテキストの概要

LuckyTemplates のフィルター コンテキストの概要

この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。

LuckyTemplates を使用したビジネス レポート

LuckyTemplates を使用したビジネス レポート

これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて