Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列内のn番目に出現する部分文字列の位置を見つける方法

Pythonでは、split()メソッドを活用することで、文字列内にn番目に出現する部分文字列の位置(インデックス)を簡単に求めることができます。

基本的な考え方

手順は以下の通りです。

  • 対象の部分文字列を区切り文字として、最大 n+1 回だけ文字列を分割します。
  • 分割後のリストの要素数が n+1 より大きければ、その部分文字列は少なくとも n 回以上出現していることになります。
  • 出現位置は、「元の文字列の長さ − 最後の分割部分の長さ − 部分文字列の長さ」というシンプルな式で計算できます。

コード例

def findnth(string, substring, n):
    parts = string.split(substring, n + 1)
    if len(parts) <= n + 1:
        return -1
    return len(string) - len(parts[-1]) - len(substring)

findnth('foobarfobar akfjfoobar afskjdf foobar', 'foobar', 2)

この関数では、部分文字列が指定した回数出現していない場合に -1 を返すことで、見つからなかったことを明確に示しています。

実行結果

上記のコードを実行すると、以下の出力が得られます。

31

この例では、文字列「foobarfobar akfjfoobar afskjdf foobar」の中に「foobar」は4回出現しており、0番目から数えて2番目の出現位置である 31 が返されています。

注意点

この実装では引数 n0から始まる インデックスとして扱われます。「1回目、2回目」という人間的な数え方にしたい場合は、内部で n - 1 を使うなど、少し修正するだけで対応可能です。

  1. Pythonの文字列は不変(イミュータブル)!同じ文字列でもid()が変わる仕組みを解説

    Pythonにおいて、文字列(str型)は不変(イミュータブル)なオブジェクトです。つまり、一度作成された文字列は後から変更できません。また、Pythonでは同じ内容の文字列を作成して別々の変数に代入した場合、両方の変数が同じ文字列オブジェクト(同じメモリ領域)を参照するように最適化されることがあります。実際に確認してみましょう。同じ文字列は同じid()を持つケース>>> a = hi >>> b = hi >>> id(a) 43706848L >>> id(b) 43706848Lこのように、変数aと変数bはまったく同

  2. Pythonで部分文字列が文字列に含まれているか確認する方法(in演算子とfindメソッド)

    Pythonでは、ある文字列が別の文字列の部分文字列(サブストリング)として含まれているかどうかを簡単に確認できます。最も基本的な方法は、in 演算子を使うことです。in 演算子を使った判定方法in 演算子は、左辺の文字列が右辺の文字列に含まれている場合に True を、含まれていない場合に False を返します。以下はその使用例です。print(ello in hello world)実行結果:Trueこのように、ello は hello world の中に含まれているため、True が出力されます。find() メソッドで位置(インデックス)を取得する部分文字列が含まれているかどうかに加