文字列内の部分文字列の n 番目の出現の検索
部分文字列の n 番目の出現に対応するインデックスの識別は次のとおりです。これは、さまざまなプログラミング シナリオでよく発生するタスクです。 Python には、この目的のために特別に設計された組み込み関数はありません。ただし、この結果を達成するために使用できるアプローチはいくつかあります。
1 つの直接的なアプローチは、ループを使用して文字列を反復処理し、部分文字列の出現をカウントすることです。開始インデックスは最初に出現した結果に初期化され、n 番目の出現が見つかるまでループが続きます。
def find_nth_occurrence(haystack, needle, n):
index = haystack.find(needle)
while index >= 0 and n > 1:
index = haystack.find(needle, index len(needle))
n -= 1
return index
このメソッドは効率的で理解しやすいですが、文字列を複数回パスする必要があり、大きな文字列の場合は時間がかかる可能性があります。
もう 1 つのより Python 的なアプローチは、通常のメソッドを使用することです。表現。正規表現は、文字列を検索および操作するための強力かつ簡潔な方法を提供します。次の関数は、 re.findall() メソッドを使用して部分文字列のすべての出現を検索し、n 番目のインデックスを取得します。
import re
def find_nth_occurrence_regex(haystack, needle, n):
occurrences = re.findall(needle, haystack)
if len(occurrences) >= n:
return haystack.index(occurrences[n - 1])
else:
return -1
このメソッドは、大きな文字列に対する反復アプローチよりも高速ですが、追加のモジュール (re) のインポートが必要です。さらに、一部のユーザーにとっては反復アプローチよりも読みにくくなる可能性があります。
反復アプローチと正規表現アプローチのどちらを選択するかは、最終的には当面のタスクの特定の要件によって決まります。小さな文字列の場合は反復アプローチで十分な場合がありますが、大きな文字列の場合は正規表現アプローチの方がパフォーマンスが向上する可能性があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3