從 Python 中的字串中提取子字串
字串是一個字元序列。無論我們從事軟體開發還是競爭性程式設計,我們始終都在處理字串。有時,在編寫程式時,我們必須訪問字串的子部分。這些子部分通常稱為子字串。子字串是字串的子集。
在 Python 中,我們可以使用字串切片或使用正規表示式或 regex 輕鬆完成此任務。
在 Python 中使用字串切片提取子字串
在 Python 中,有幾種方法可以進行字串切片。索引是最基本,最常用的方法。請參考以下程式碼。
myString = "Mississippi"
print(myString[:]) # Line 1
print(myString[4 : ]) # Line 2
print(myString[ : 8]) # Line 3
print(myString[2 : 7]) # Line 4
print(myString[4 : -1]) # Line 5
print(myString[-6 : -1]) # Line 6
輸出:
Mississippi
issippi
Mississi
ssiss
issipp
ssipp
在上面的程式碼中,我們在儲存字串的變數的末尾新增了 []
括號。我們使用此符號進行索引。在這些括號內,我們新增了一些表示索引的整數值。
這是方括號 [start : stop : step]
的格式(以冒號(:
)分隔)。
預設情況下,start
的值是 0
或第一個索引,stop
的值是最後一個索引,step
的值是 1
。start
代表子字串的開始索引,stop
代表子字串的結束索引,step
代表在每個索引之後遞增的值。
返回的子字串實際上在 start
索引和 stop - 1
索引之間,因為在 Python 中索引從 0
開始。因此,如果我們想從 Mississippi
中檢索 Miss
,則應使用 [0 : 4]
方括號不能為空。如果要使用預設值,則應在所需數量的冒號:
之間新增空格,以指出要引用的引數。請參考以下列表以更好地理解。
[:]
- > 返回整個字串。[4 : ]
- > 返回從索引4
到最後一個索引的子字串。[ : 8]
- > 返回從索引0
到索引7
的子字串。[2 : 7]
- > 返回從索引2
到索引6
的子字串。[4 : -1]
- > 返回從索引4
到倒數第二個索引的子字串。-1
可用於定義 Python 中的最後一個索引[-6 : -1]
- > 返回從結尾的第六個索引到倒數第二個索引的子字串。
在 Python 中使用 slice()
建構函式提取子字串
無需在括號內提及索引,我們可以使用 slice()
建構函式來建立 slice
物件,以對字串或任何其他序列(如列表或元組)進行切片。
slice(start, stop, step)
建構函式接受三個引數,即 start
,stop
和 step
。它們的含義與上面解釋的完全相同。
與方括號表示法相比,切片
的工作方式略有不同。切片物件放在字串變數括號內,例如 myString[<'slice' object>]
。
如果將單個整數值(例如 x
)提供給 slice()
建構函式,並進一步用於索引切片,則會檢索從索引 0
到索引 x - 1
的子字串。請參考以下程式碼。
myString = "Mississippi"
slice1 = slice(3)
slice2 = slice(4)
slice3 = slice(0, 8)
slice4 = slice(2, 7)
slice5 = slice(4, -1)
slice6 = slice(-6, -1)
print(myString[slice1])
print(myString[slice2])
print(myString[slice3])
print(myString[slice4])
print(myString[slice5])
print(myString[slice6])
輸出:
Mis
Miss
Mississi
ssiss
issipp
ssipp
收到的輸出是不言自明的。索引遵循與括號符號定義相同的規則。
在 Python 中使用正規表示式提取子字串
對於正規表示式,我們將使用 Python 的內建包 re
。
import re
string = "123AAAMississippiZZZ123"
try:
found = re.search('AAA(.+?)ZZZ', string).group(1)
print(found)
except AttributeError:
pass
輸出:
Mississippi
在上面的程式碼中,search()
函式搜尋在傳遞的字串中作為引數提供的模式的第一個位置。它返回一個 Match
物件。Match
物件具有許多定義輸出的屬性,例如子字串的 span
或子字串的開始和結束索引。
print(dir(re.search('AAA(.+?)ZZZ', string)))
將輸出 Match
物件的所有屬性。請注意,某些屬性可能會丟失,因為使用 dir()
時會呼叫 __dir__()
方法,並且此方法返回所有屬性的列表。而且此方法是可編輯的或可重寫的。