部分文字列を検索するための Python 文字列に含まれるもの

Python の文字列には、in 演算子を使用して、テキスト内に部分文字列が出現するかどうかをチェックします。 ロジックをルーティングしたり、入力を検証したり、メッセージをフィルターしたりするために、簡単な「はい/いいえ」テストが必要な場合に使用します。 これは、テキストに部分文字列が含まれているかどうかをテストするためのシンプルで読みやすい方法を提供します。

Python 文字列にはテキスト マッチングの例が含まれています

出力:

ここに出力が表示されます...

出力:

send tracking

この例の仕組み

  • status 文字列には、短いステータス メッセージが含まれます。
  • "shipped" in status は、部分文字列メンバーシップ テストを実行し、True を返します。
  • 条件が true であるため、print 呼び出しが実行されます。
  • 出力には、キーワードが存在する場合にのみアクションがトリガーされることが示されています。

よくある間違い

間違い 1: チェックでは大文字と小文字が区別されないと仮定します。

subject = "Order Shipped"
if "shipped" in subject:
    print("send tracking")
subject = "Order Shipped"
if "shipped" in subject.casefold():
    print("send tracking")

発生理由: in は文字を正確に比較するため、大文字と小文字が一致する必要があります。大文字と小文字を区別しない包含チェックが必要な場合は、両方の文字列を正規化します (通常は casefold() を使用します)。

間違い 2: 真実性チェックで find() を使用する。

message = "promo"
if message.find("pro"):
    print("flag")
message = "promo"
if "pro" in message:
    print("flag")

発生理由: find() はインデックスを返しますが、部分文字列が見つかった場合でもインデックス 0 は偽になります。ブール値を含むチェックに in を使用するか、インデックスが必要な場合は find()-1 を比較します。

間違い 3: 空の文字列は常に一致することを忘れています。

needle = ""
text = "invoice 123"
if needle in text:
    print("match")
needle = ""
text = "invoice 123"
if needle and needle in text:
    print("match")

この問題が発生する理由: Python は空の文字列をすべての文字列の部分文字列として扱います。 「一致しない」ことを意味する場合は空の入力を避けてください。

文字列に含まれるものと検索するもの: どちらを使用するか

必要使用
はい/いいえの答えだけneedle in text
マッチの位置text.find(needle)
が見つからない場合のエラーtext.index(needle)

最速かつ明確なメンバーシップ テストには in を使用してください。 find() または index() は、一致位置も必要な場合、または失敗してエラーを発生させたい場合にのみ使用してください。

パフォーマンスに関する考慮事項

文字列に含まれるチェックはテキストを線形にスキャンするため、各 in テストのテキストの長さは O(n) です。大文字と小文字を区別しないチェックを繰り返す場合は、テキストを一度正規化して (text = text.casefold() など)、それを再利用して余分な作業を避けます。非常に大きな文字列でさまざまなパターンを検索する必要がある場合は、パターンで必要な場合にのみ、より特殊な検索または正規表現を検討してください。

Python 文字列を使用する場合

  • 実行するロジックのブランチを決定するには、簡単な部分文字列チェックが必要です。
  • 必要なキーワードまたはマーカーを探して入力を検証しています。
  • インデックス結果ではなく、可能な限り明確なブール テストが必要です。
  • ワイルドカードや複雑なパターンは必要ありません。それらの場合は、re を使用してください。
  • 一致位置は必要ありません。その場合は、代わりに find() または index() を使用してください。