Python程式提取字串直到第一個非字母數字字元


Python字串是表示資訊或資料的字元序列。普通字串可以包含用單引號或雙引號括起來的各種字元,但字母數字字串僅包含**數字**和**字母**。**字母數字**和**非字母數字**字串都用於各種場景,包括密碼保護、資料處理和驗證、格式化等。

可以識別和提取特定的模式。我們還可以使用這些型別的字串提供不同的組合。我們將根據這些字串執行操作。我們的任務是提取字串,直到遇到第一個非字母數字字元。

理解問題

在遇到非字母數字字元之前,我們必須從原始字串中提取子字串。讓我們藉助一個示例來理解這一點。

輸入輸出場景

讓我們考慮一個包含以下值的字典:

Input: Inp_STR = "Sales18@22!Roam"

給定的字串包含字母、數字和特殊字元。我們必須在遇到非字母數字字元時立即檢索子字串。

Output: Sales18

我們可以看到從原始字串中返回了一個子字串“Sales18”,因為在此之後遇到了一個非字母數字字元,即“@”。現在我們已經瞭解了問題陳述,讓我們討論一些解決方案。

使用迭代

這是一種基於提供的條件提取字串的基本且更簡單的方案。我們將傳遞一個字串並建立一個新的變數,該變數將儲存所有字母數字字元,即字母(大寫和小寫)和數字。在此之後,我們將遍歷原始字串並迭代每個字元。

我們將建立一個條件,該條件將檢查原始字串中的字元是否為字母數字。一旦遇到非字母數字字元,迴圈將中斷並返回子字串。

示例

以下是提取字串直到第一個非字母數字字元的示例:

Inp_STR = "Sales18@22Roam"
print(f"The original string is: {Inp_STR}")

ExSTR = ""
alphaNum = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
for x in Inp_STR:
   if x not in alphaNum:
      break
   else:
      ExSTR += x
print(f"The extracted string till 1st Non-Alphanumeric character: {ExSTR}")

輸出

The original string is: Sales18@22Roam
The extracted string till 1st Non-Alphanumeric character: Sales18

使用正則表示式模組 + Search()

正則表示式模組或“re”模組是一個強大的程式設計工具,用於搜尋和匹配模式。這些模式以唯一表達式的形式傳遞。使用此模組,我們將檢測原始字串中的非字母數字模式並檢索第一次遇到的序列。我們使用“search()”函式搜尋字串中是否存在由表示式“\W+”表示的非字母數字模式。

\W”表示非字母數字類,“+”設定非字母數字字元連續匹配的邏輯。“.start()”方法返回匹配子字串的起始索引,此索引值將用於檢索所需的子字串。

示例

以下是一個示例:

import re
Inp_STR = "Sales18@22Roam"
print(f"The original string is: {Inp_STR}")

ExSTR = re.search(r"\W+", Inp_STR).start()
print(f"The 1st non-alphanumeric character is encountered at: {ExSTR}")
ExSTR = Inp_STR[ : ExSTR]

print(f"The extracted string till 1st Non-Alphanumeric character: {ExSTR}")

輸出

The original string is: Sales18@22Roam
The 1st non-alphanumeric character is encountered at: 7
The extracted string till 1st Non-Alphanumeric character: Sales18

使用正則表示式模組 + Findall()

這是提取字串直到遇到第一個非字母數字字元的另一種方案。在這種方案中,我們將使用re模組中的“findall()”函式查詢由字母數字字元組成的子字串的所有出現。

將獲得匹配子字串的列表,我們將使用“0”索引值檢索第一個子字串。我們將使用正則表示式:“[\dA-Za-z]*”,它表示連續出現零個或多個字母數字字元。

正則表示式符號“\d”匹配0到9之間的任何數字,“A-Z”匹配A到Z之間的任何大寫字母,“a-z”匹配a到z之間的任何小寫字母。

示例

以下是一個示例:

import re
Inp_STR = "Sales18@22Roam"
print(f"The original string is: {Inp_STR}")

ExSTR = re.findall(r"[\dA-Za-z]*", Inp_STR)[0]
print(f"The extracted string till 1st Non-Alphanumeric character: {ExSTR}")

輸出

The original string is: Sales18@22Roam
The extracted string till 1st Non-Alphanumeric character: Sales18

使用Isalnum()方法

在這種方案中,我們將迭代原始字串中每個字元的索引,並建立一個條件,該條件將檢查索引“x”處的字元是否不是字母數字。這是藉助“isalnum()”方法完成的,該方法確定字串的字母數字性質。在此之後,我們將使用列表切片提取字串直到第一個字母數字字元。

示例

以下是一個示例:

Inp_STR = "Sales18@22Roam"
print(f"The original string is: {Inp_STR}")

for x in range(len(Inp_STR)):
   if not Inp_STR[x].isalnum():
      ExSTR = Inp_STR[:x]
      print(f"The 1st non-alphanumeric character is encountered at: {x}")
      break
   else:
      ExSTR = Inp_STR
print(f"The extracted string till 1st Non-Alphanumeric character: {ExSTR}")

輸出

The original string is: Sales18@22Roam
The 1st non-alphanumeric character is encountered at: 7
The extracted string till 1st Non-Alphanumeric character: Sales18

結論

在本文中,我們討論了一些有效且最佳化的解決方案,用於在遇到第一個非字母數字字元時從字串中提取子字串。我們瞭解了簡單和蠻力的解決方案以及高階和最佳化的解決方案。我們使用了正則表示式模組並使用了其“search()”和“findall()”函式來提取相關字串。最後,我們討論了另一個基於列表切片的解決方案,其中涉及使用“isalnum()”方法。

更新於: 2023年7月12日

329 次檢視

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告