Python 中字串中子字串的第 N 次出現
- 在 Python 中查詢字串中子字串的第 N 次出現
-
在 Python 中使用
split()
方法計運算元字串的第 N 次出現 -
在 Python 中使用
find()
方法查詢子字串的第 N 次出現 - 在 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()
函式和正規表示式方法,已經進行了非常詳細的討論,以使其更加清晰。