Python 中字串中子字串的第 N 次出現

Namita Chaudhary 2023年1月30日 2022年5月17日
  1. 在 Python 中查詢字串中子字串的第 N 次出現
  2. 在 Python 中使用 split() 方法計運算元字串的第 N 次出現
  3. 在 Python 中使用 find() 方法查詢子字串的第 N 次出現
  4. 在 Python 中使用正規表示式查詢子字串的第 N 次出現
  5. まとめ
Python 中字串中子字串的第 N 次出現

Python 中的字串用於儲存一系列字元,以便我們可以對它們執行不同的操作。Python 中的子字串是包含在另一個字串中的一組字元。

在本文中,我們將提取子字串在第 n 次之後出現的索引,並討論在 Python 中查詢子字串的第 n 個索引的各種方法。

在 Python 中查詢字串中子字串的第 N 次出現

在這個例子中,我們得到一個字串和一個子字串以及值 n,這樣我們需要找到我們的子字串在第 n 次之後出現在原始字串中的索引。假設我們得到一個字串 s,子字串 str,其值為 n

示例程式碼:

s = "batpollbatsitbat"
str = "bat"
n = 2

輸出:

7

我們需要返回我們的子字串 "bat" 第二次出現在原始字串中的索引。因此,我們將根據基於 0 的索引返回 7 作為輸出。

在 Python 中使用 split() 方法計運算元字串的第 N 次出現

Python 的 split() 方法用於通過指定的分隔符將給定的字串拆分為字串列表。但是,我們可以顯式指定分隔符(空格),我們需要在其中打破字串。

split() 函式還採用第二個引數作為引數 maxsplit,用於指定在找到子字串後需要中斷字串的次數。

在下面的示例中,我們需要將字串 n 次拆分,其中 n 是問題中給出的第 n 次出現。

示例程式碼:

def solve(s, str, n):
    sep = s.split(str, n)
    if len(sep) <= n:
        return -1
    return len(s) - len(sep[-1]) - len(str)
print(solve('foobarfobar akfjfoobar afskjdffoobarruythfoobar', 'foobar', 2))

輸出:

16

我們在上面的程式中有一個函式 solve(),它的主要邏輯已經實現。第一行使用 split() 函式,其中子字串 str 作為分隔符傳遞,n 的值作為 maxsplit 的值傳遞。

在這一行之後,我們的字串 s 被分解成一個字串列表。儲存在 sep 變數中的字串列表根據以下示例中的輸入進行分隔。

['', 'fobar akfj', ' afskjdffoobarruythfoobar']

原始字串在我們找到子字串 str 的索引處分隔。但是,由於 n 的值,這種拆分只發生了兩次。

sep 變數中儲存的最後一個字串在某些索引處與我們的子字串匹配,但我們沒有將它們分開。

split() 函式之後,我們檢查了一個條件,即 sep 變數的長度是否大於 n 的值,因為如果存在使用者試圖搜尋第 n 次出現的情況對於不存在 n 次的子字串,在這種情況下,我們需要返回 -1

現在是我們的主要邏輯,計運算元字串第 n 次出現的索引,並且我們只將字串分隔了 n 次。因此,在第 n 次出現子字串之後可能留下的字串被儲存為 sep 變數的最後一個元素。

因此,我們用 sep 變數中存在的最後一個字串的長度減去原始字串 s 的長度,該變數以 sep[-1] 訪問。

這給出了我們想要的子字串的出現結束的索引,但是由於我們需要起始索引,我們也將減去子字串的長度。

通過這種方式,我們可以計算出第 n 次出現的子字串的索引。

在 Python 中使用 find() 方法查詢子字串的第 N 次出現

Python 中的 find() 方法用於查詢指定值第一次出現的索引。我們還可以在 find() 函式中指定開始和結束索引。

這些開始和結束索引告訴我們將搜尋限制在指定範圍內。

示例程式碼:

s = "xyxyxyxybvxy"
str = "xy"
n = 4
x = -1
for i in range(0, n):
    x = s.find(str,x+1)
print ("Nth occurrence is at", x)

輸出:

Nth occurrence is at 6

我們對字串 s 應用了 find() 函式,它將在每次迭代中找到原始字串中子字串的第一次出現。

在我們的程式碼中,在第一次迭代中,由於 x 的值(最初是 -1),原始字串將從 0th 索引搜尋到末尾,但是在 find() 函式中,它變為 x+1 = -1+1 = 0)。

此迭代將使我們在原始字串中首次出現子字串。然而,第二次迭代將從索引 1 搜尋字串到末尾(因為 x 在前一次迭代中變為 0 並且 find() 函式變為 x+1 = 0+1 = 1)。

此迭代將為我們提供第二次出現的子字串。我們可以進行這樣的 n 次迭代來找到字串的第 n 次出現。

在 Python 中使用正規表示式查詢子字串的第 N 次出現

正規表示式用於在字串中查詢特定模式,它是一個字元序列,可以讓我們形成搜尋模式。Python 有一個稱為 re 的正規表示式包。

我們將使用 re 包來查詢第 n 次出現的子字串。

示例程式碼:

import re
s = "yoofpofbof"
n = 3
result = [m.start() for m in re.finditer(r"of" , s)]
if(len(result)<=n):
    print(result[n-1])

輸出:

8

我們在第一行匯入了 re 包以使用上述程式碼中的正規表示式。之後,我們的輸入就被定義了。

我們使用 re 包中的 finditer() 方法,它為我們提供了原始字串中所有匹配子字串的開始和結束索引,但我們只需要開始索引即可找到第 n 次出現。

因此,我們使用 m.start() 方法,它只會給我們匹配的子字串的起始索引。

我們使用 for 迴圈查詢子字串的所有起始索引並將它們儲存在 result 變數中。現在,如果使用者提供了不在字串中的 n 的值,它將丟擲錯誤,因為我們檢查了結果列表的長度和 n 變數之間的條件。

最後,我們列印子字串第 n 次出現的索引。

まとめ

在本教程中,我們討論了三種不同的方法來查詢字串中第 n 次出現的子字串。這些方法,如 find() 函式、split() 函式和正規表示式方法,已經進行了非常詳細的討論,以使其更加清晰。

相關文章 - Python String