從 Python 中的字串中提取子字串

Vaibhav Vaibhav 2023年10月10日
  1. 在 Python 中使用字串切片提取子字串
  2. 在 Python 中使用 slice() 建構函式提取子字串
  3. 在 Python 中使用正規表示式提取子字串
從 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 的值是 1start 代表子字串的開始索引,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) 建構函式接受三個引數,即 startstopstep。它們的含義與上面解釋的完全相同。

與方括號表示法相比,切片的工作方式略有不同。切片物件放在字串變數括號內,例如 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__() 方法,並且此方法返回所有屬性的列表。而且此方法是可編輯的或可重寫的。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

相關文章 - Python String