2024-08-13|閱讀時間 ‧ 約 29 分鐘

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

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():返回匹配的起始和結束位置作為一個元組。



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.