[Python]re 正則表達式基本介紹

閱讀時間約 8 分鐘

re 模組基本介紹

re 模組是 Python 用來處理正則表達式的標準模組。

正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。

常用函式

這些函式涵蓋了 re 模組中的大部分功能,可以滿足日常的文本處理需求。

1. re.match()

match = re.match(pattern, string)
  • 功能:嘗試從字串的起始位置匹配模式。如果匹配成功,則返回一個 Match 物件;否則返回 None
  • 用途:用於檢查字串是否以某個模式開頭

簡單範例

  • re.match() 嘗試從字串的起始位置匹配模式,這裡檢查 text 是否以 "Hello" 開頭。
import re

text = "Hello, world!"
pattern = r'^Hello'

# 檢查字串是否以 "Hello" 開頭
match = re.match(pattern, text)
if match:
print("The string starts with 'Hello'")
else:
print("No match")

# 輸出
# The string starts with 'Hello'​


2. re.search()

search = re.search(pattern, string)
  • 功能:在整個字串中搜尋模式。如果找到匹配,則返回一個 Match 物件;否則返回 None
  • 用途:用於在字串的任意位置搜尋第一次匹配

簡單範例

re.search() 在字串中搜尋第一次出現的 "hello"。

import re

text = "Say hello to the world"
pattern = r'hello'

# 在字串中搜尋 "hello"
search = re.search(pattern, text)
if search:
print(f"Found '{search.group()}' in the text!")
else:
print("No match")

# 輸出
# Found 'hello' in the text!


3. re.findall()

matches = re.findall(pattern, string)
  • 功能:搜尋字串中所有與模式匹配的字串,並以列表的形式返回這些匹配。
  • 用途:用於提取字串中所有符合模式的部分

簡單範例

re.findall() 返回字串中所有匹配的數字

import re

text = "My numbers are 123, 456, and 789."
pattern = r'\d+'

# 提取字串中的所有數字
numbers = re.findall(pattern, text)
print(numbers) # 輸出: ['123', '456', '789']


4. re.finditer()

matches = re.finditer(pattern, string)
  • 功能:返回一個可迭代物件,裡面包含所有與模式匹配的子串的 Match 物件。
  • 用途:與 findall() 類似,但返回 Match 物件,這樣你可以取得更多的匹配資訊。

簡單範例

re.finditer() 返回一個可迭代物件,包含每個匹配的詳細資訊。

import re

text = "My numbers are 123, 456, and 789."
pattern = r'\d+'

# 找到所有數字並逐一打印
matches = re.finditer(pattern, text)
for match in matches:
print(f"Found {match.group()} at position {match.span()}")

#輸出
'''
Found 123 at position (15, 18)
Found 456 at position (20, 23)
Found 789 at position (29, 32)
'''



5. re.split()

parts = re.split(pattern, string)
  • 功能:根據模式分割字串,並以列表形式返回分割後的結果。
  • 用途:用於根據匹配模式來分割字串。

簡單範例

re.split() 根據指定模式分割字串,這裡使用 ,;| 作為分隔符。

import re

text = "apple, banana; orange|grape"
pattern = r'[;,|]'

# 根據逗號、分號或豎線來分割字串
fruits = re.split(pattern, text)
print(fruits) # 輸出: ['apple', ' banana', ' orange', 'grape']


6. re.sub()

result = re.sub(pattern, repl, string)
  • 功能:使用 repl 替換字串中所有與模式匹配的部分,並返回替換後的字串。
  • 用途:用於進行模式替換操作。

簡單範例

re.sub() 替換字串中所有與模式匹配的部分。

import re

text = "The price is 100 dollars"
pattern = r'\d+'

# 替換字串中的數字為 "###"
new_text = re.sub(pattern, '###', text)
print(new_text) # 輸出: "The price is ### dollars"


7. re.subn()

result, num_subs = re.subn(pattern, repl, string)
  • 功能:與 re.sub() 類似,但返回一個包含兩個元素的元組:替換後的字串和替換的次數。
  • 用途:用於需要知道替換次數的情況。

簡單範例

re.subn() 替換字串中的模式並返回替換後的字串及替換次數。

import re

text = "There are 2 cats and 3 dogs."
pattern = r'\d+'

# 替換字串中的數字為 "###" 並返回替換次數
new_text, num_subs = re.subn(pattern, '###', text)
print(new_text) # 輸出: "There are ### cats and ### dogs."
print(num_subs) # 輸出: 2


8. re.compile()

compiled_pattern = re.compile(pattern)
  • 功能:將正則表達式編譯成一個正則表達式物件,這個物件可以重複使用以進行匹配操作。
  • 用途:在需要多次使用同一模式時,預先編譯模式以提高性能。

簡單範例

re.compile() 編譯正則表達式以便重複使用。

import re

pattern = re.compile(r'\d+')
text = "My number is 12345."

# 使用編譯好的正則表達式匹配數字
match = pattern.search(text)
if match:
print(f"Found number: {match.group()}") # 輸出: "Found number: 12345"



Match 物件

Match 物件是 re.match()re.search()re.finditer() 等函式返回的結果,當有匹配時,它包含了匹配的詳細資訊。

常用屬性和方法:

  • group():返回匹配的字串或特定的群組。
  • start():返回匹配的起始位置。
  • end():返回匹配的結束位置。
  • span():返回匹配的起始和結束位置作為一個元組。



avatar-img
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
在 Python 中,tuple 與 List有一個關鍵的不同點:tuple 是不可變的,這意味著一旦創建了 tuple,就無法更改其內容。 這與 List的可變性形成了對比,list 可以新增、刪除或修改元素。 元素的意思: 元素:指的是 List 中的每一個獨立的項目或值。
避免 thread 競速(Race Condition)是多執行緒編程中常見的挑戰之一。 Race Condition 發生在多個執行緒同時訪問和修改共享資源時,因為執行緒之間的執行順序無法預測,可能會導致數據的不一致性或意外行為。 本文主要介紹如何使用Lock來避免此狀況出現。 首先先看沒
呈上篇,若是在大型系統中使用,重複被調用時,在每次紀錄時都會創建一個新的 FileHandler,這會導致日誌處理器不斷累積,從而使日誌重複記錄。 [Python]使用logging創建兩個以上的日誌紀錄 使用__new__的方法來避免重複調用 改良後 setup_logger 方法中創建一
在處理數據時,最可能會遇到數據中含有None的時候,若沒有處理就進行運算就會造成程式崩潰或者報錯 數據中含有None input_list = [(42, 292), (28, 296), (999, 92), (993, 46), (219, 4), (279, 2), (None, None
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
在 Python 中,tuple 與 List有一個關鍵的不同點:tuple 是不可變的,這意味著一旦創建了 tuple,就無法更改其內容。 這與 List的可變性形成了對比,list 可以新增、刪除或修改元素。 元素的意思: 元素:指的是 List 中的每一個獨立的項目或值。
避免 thread 競速(Race Condition)是多執行緒編程中常見的挑戰之一。 Race Condition 發生在多個執行緒同時訪問和修改共享資源時,因為執行緒之間的執行順序無法預測,可能會導致數據的不一致性或意外行為。 本文主要介紹如何使用Lock來避免此狀況出現。 首先先看沒
呈上篇,若是在大型系統中使用,重複被調用時,在每次紀錄時都會創建一個新的 FileHandler,這會導致日誌處理器不斷累積,從而使日誌重複記錄。 [Python]使用logging創建兩個以上的日誌紀錄 使用__new__的方法來避免重複調用 改良後 setup_logger 方法中創建一
在處理數據時,最可能會遇到數據中含有None的時候,若沒有處理就進行運算就會造成程式崩潰或者報錯 數據中含有None input_list = [(42, 292), (28, 296), (999, 92), (993, 46), (219, 4), (279, 2), (None, None
你可能也想看
Google News 追蹤
Thumbnail
這篇文章將介紹 Renpy 中常見的文字造型,包括抗鋸齒、加粗文字、控制文字顏色、文字字體、斜體、間距控制、製作文字外框、控制文字大小、畫線、文字方向等效果。並提供了建立文字造型的方法和應用範例。
ITS python認證內容含蓋六大主題
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
這篇文章將介紹 Renpy 中常見的文字造型,包括抗鋸齒、加粗文字、控制文字顏色、文字字體、斜體、間距控制、製作文字外框、控制文字大小、畫線、文字方向等效果。並提供了建立文字造型的方法和應用範例。
ITS python認證內容含蓋六大主題
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
Thumbnail
在Python中,我們可以用def關鍵字定義函數,並透過函數名稱呼叫它。函數參數可以是必填、關鍵字、默認或不定長度的類型。return語句負責結束函數並回傳值。全域變數可以在整個程序中使用,而區域變數只能在特定函數內使用。我們還可以在一個文件中定義函數,然後在另一個文件中呼叫它。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。