天天看點

掌握 Python RegEx:深入探讨模式比對

作者:冷凍工廠

動動發财的小手,點個贊吧!

什麼是正規表達式?

正規表達式通常縮寫為 regex,是處理文本的有效工具。本質上,它們由一系列建立搜尋模式的字元組成。該模式可用于廣泛的字元串操作,包括比對模式、替換文本和分割字元串。

曆史

掌握 Python 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)
           
掌握 Python RegEx:深入探讨模式比對

re 子產品中有更多函數可以用來建構更複雜的模式。但首先,讓我們看看 re 子產品中的常用函數。

常用函數

在向您介紹 Python RegEx 的基礎知識之前,我們先看看常用函數,以便更好地掌握其餘概念。 re 子產品包含許多不同的功能。通過使用它們,我們可以執行不同的操作。

在接下來的部分中,我們将發現其中的一些。

掌握 Python RegEx:深入探讨模式比對

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 RegEx:深入探讨模式比對

輸出顯示模式“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")
           
  • 輸出
掌握 Python RegEx:深入探讨模式比對

輸出顯示我們的代碼從給定的文本中捕捉到了令人驚奇的結果。

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)
           
  • 輸出
掌握 Python RegEx:深入探讨模式比對

輸出表示在我們的文本中找到的字母“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()}")
           
  • 輸出
掌握 Python RegEx:深入探讨模式比對

輸出顯示文本中模式“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 RegEx:深入探讨模式比對

輸出顯示我們可以成功地将文本中的“Python”替換為“Java”。