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()”方法。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP