動動發财的小手,點個贊吧!
什麼是正規表達式?
正規表達式通常縮寫為 regex,是處理文本的有效工具。本質上,它們由一系列建立搜尋模式的字元組成。該模式可用于廣泛的字元串操作,包括比對模式、替換文本和分割字元串。
曆史
數學家 Stephen Cole Kleene 在 20 世紀 50 年代首次引入正規表達式作為描述正則集或正則語言的表示法。
如今,正規表達式已成為程式員、資料科學家和 IT 專業人員的一項基本技能。
重要性
在深入研究如何使用這些正規表達式之前,讓我們通過使用Python來看看它的不同應用範圍,以激勵我們自己。
- 資料驗證:正規表達式對于驗證不同類型的資料非常有用。 (電子郵件位址、電話号碼)
- 網頁抓取:通過網頁抓取資料時,可以使用正規表達式來解析 HTML 并隔離必要的資訊。
- 搜尋和替換:正規表達式擅長識别符合特定模式的字元串并用替代項替換它們。此功能在文本編輯器、資料庫和編碼中尤其有價值。
- 文法突出顯示:許多文本編輯器使用正規表達式來進行文法突出顯示。
- 自然語言處理 (NLP):在 NLP 中,正規表達式可用于标記化、詞幹提取和一系列其他文本處理函數等任務。
- 日志分析:在處理日志檔案時,正規表達式可以有效地提取特定日志條目或分析一段時間内的模式。
現在我希望你有足夠的動力!
讓我們開始使用 re 子產品,它是關于正規表達式的。
re 子產品簡介
Python 通過 re 子產品提供對正規表達式的固有支援。
該子產品是Python的标準庫,這意味着您不必在外部安裝它,它會随每個Python安裝一起提供。
re 子產品包含用于使用正規表達式的各種函數和類。一些函數用于比對文本,一些函數用于分割文本,還有一些函數用于替換文本。
它包括為處理正規表達式而定制的各種函數和類。其中,某些函數被指定用于文本比對,其餘函數被指定用于文本分割或文本替換。
導入 re 子產品
正如我們已經提到的,它附帶安裝,是以無需擔心安裝。
這就是為什麼要開始在 Python 中使用正規表達式,您需要首先導入 re 庫。您可以使用 import 語句來執行此操作,如下所示。
import re
導入庫後,您可以啟動 re 子產品提供的函數和類等功能。
讓我們從一個簡單的例子開始。
假設您想要查找字元串中出現的所有單詞“Python”。
我們可以使用 re 子產品中的 findall() 函數。
這是代碼。
import re
# Sample text
text = "Python is an amazing programming language. Python is widely used in various fields."
# Find all occurrences of 'Python'
matches = re.findall("Python", text)
# Output the matches
print(matches)
re 子產品中有更多函數可以用來建構更複雜的模式。但首先,讓我們看看 re 子產品中的常用函數。
常用函數
在向您介紹 Python RegEx 的基礎知識之前,我們先看看常用函數,以便更好地掌握其餘概念。 re 子產品包含許多不同的功能。通過使用它們,我們可以執行不同的操作。
在接下來的部分中,我們将發現其中的一些。
re.match()
re.match() 捕獲正規表達式是否以特定字元串開頭。
如果存在比對,該函數傳回一個比對對象;如果沒有,則不傳回任何内容。
接下來,我們将使用 re.match() 函數。這裡我們将檢查字元串文本是否以單詞“Python”開頭。然後我們将結果列印到控制台。
import re
pattern = "Python"
text = "Python is amazing."
# Check if the text starts with 'Python'
match = re.match(pattern, text)
# Output the result
if match:
print("Match found:", match.group())
else:
print("No match found")
- 輸出
輸出顯示模式“Python”與文本的開頭比對。
re.search()
與 re.match() 相比,re.search() 函數掃描整個字元串來搜尋比對項,如果發現比對項,則生成一個比對對象。
在下面的代碼中,我們使用 re.search() 函數在字元串文本中的任意位置搜尋單詞“amazing”。如果找到該單詞,我們将其列印出來;否則,我們列印“未找到比對項”。
pattern = "amazing"
text = "Python is amazing."
# Search for the pattern in the text
match = re.search(pattern, text)
# Output the result
if match:
print("Match found:", match.group())
else:
print("No match found")
- 輸出
輸出顯示我們的代碼從給定的文本中捕捉到了令人驚奇的結果。
re.findall()
re.findall() 函數用于收集字元串中某個模式的所有非重疊比對項。它将這些比對項作為字元串清單傳回。
在下面的示例中,我們使用 re.findall() 函數查找字元串中的所有“a”。比對項作為清單傳回,然後我們将其列印到控制台。
pattern = "a"
text = "This is an example text."
# Find all occurrences of 'a' in the text
matches = re.findall(pattern, text)
# Output the matches
print(matches)
- 輸出
輸出表示在我們的文本中找到的字母“a”的所有非重疊出現。
re.finditer()
re.finditer() 函數與 re.findall() 類似,但它傳回一個疊代器,該疊代器産生比對對象。
在下面的代碼中,re.finditer()函數用于查找字元串文本中所有出現的字母“a”。它傳回比對對象的疊代器,我們列印每個比對的索引和值。
pattern = "a"
text = "This is an example text."
# Find all occurrences of 'a' in the text
matches = re.finditer(pattern, text)
# Output the matches
for match in matches:
print(f"Match found at index {match.start()}: {match.group()}")
- 輸出
輸出顯示文本中模式“a”的索引。
re.sub()
re.sub() 函數用于将一個字元串替換為另一個字元串。接下來,我們将使用 re.sub() 函數将“Python”替換為“Java”。然後我們列印修改後的字元串。
pattern = "Python"
replacement = "Java"
text = "I love Python. Python is amazing."
# Replace 'Python' with 'Java'
new_text = re.sub(pattern, replacement, text)
# Output the new text
print(new_text) # Output: "I love Java. Java is amazing."
- 輸出
輸出顯示我們可以成功地将文本中的“Python”替換為“Java”。