Python 中正則表示式替代是如何工作的?


Python 的內建模組 're' 提供了一個強大的工具來處理文字資料,而正則表示式 (regex) 是其中至關重要的部分。但是,有時您可能需要使用替代方法來執行不涉及正則表示式的文字操作任務。在本文中,我們將探討五個程式碼示例,這些示例演示瞭如何在 Python 中使用替代方法來執行文字操作任務,以及分步說明和插圖。

正則表示式是用於處理 Python 中文字的極其強大的工具。它們使我們能夠以其他方式耗時且複雜的方式搜尋、操作和處理文字。但是,有時我們可能會遇到需要對搜尋模式有更多靈活性和控制的場景。這時,正則表示式替代就派上用場了。

在本文中,我們將深入探討 Python 中正則表示式替代的世界,並探討它們的工作原理。我們將研究現實世界的例子並分解每個步驟,幫助您更好地理解如何在自己的專案中有效地使用這些替代方案。

正則表示式替代是一種提供多個模式的方法,正則表示式引擎可以逐一嘗試,直到找到匹配項。這在處理具有多種可能格式或結構的文字時特別有用。透過使用替代方案,我們可以建立更強大和靈活的正則表示式。

使用 Split() 和 Join() 方法

假設您有一個像 "hello world" 這樣的字串,並且您想將其拆分為一個單詞列表,然後將它們重新連線成一個帶有空格分隔符的字串。

您可以使用內建的 'split()' 方法將字串拆分為一個單詞列表,然後使用 'join()' 方法將列表重新連線成一個字串。

'split()' 方法使用空格作為分隔符將字串拆分為一個單詞列表。

'join()' 方法使用空格作為分隔符將單詞列表重新連線成一個字串。

text = "hello world"
words = text.split()
joined_text = " ".join(words)

print(joined_text)  # Output: "hello world"

輸出

hello world

使用 Find() 和 Replace() 方法

假設您有一個像 "hello world" 這樣的字串,並且您想將所有出現的 "hello" 替換為 "hi"。

您可以使用內建的 'find()' 方法查詢字串中所有出現的 "hello",然後使用 'replace()' 方法將它們替換為 "hi"。

'find()' 方法查詢字串中第一次出現的 "hello" 並返回其索引。

'replace()' 方法替換第一次出現的 ??????

text = "hello world"
new_text = text.replace("hello", "hi")

print(new_text)  # Output: "hi world"

使用迭代器方法

假設您有一個像 "hello world" 這樣的字串,並且您想逐個提取字串中的所有單詞並將它們儲存在一個列表中。

您可以使用內建的 'iterator()' 方法迭代字串並逐個提取每個單詞。

'iterator()' 方法返回一個迭代器物件,允許您一次一個字元地迭代字串。

'isalpha()' 方法檢查當前字元是否為字母。如果是,我們將其附加到單詞列表中。

text = "hello world"
words = []
for char in text:
    if char.isalpha():
        words.append(char)

print(words) 

輸出

['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']

在 Python 中,我們可以使用 '|' 符號在正則表示式模式中指定替代方案。引擎將按順序嘗試每個模式,並且第一個匹配的模式將被視為成功匹配。

查詢多個副檔名

讓我們考慮一個場景,我們想要搜尋目錄中所有具有 .jpg 或 .jpeg 副檔名的檔案。我們可以使用 '|' 符號在我們的正則表示式中建立替代模式

示例

在此示例中,正則表示式模式 r'.(jpg|jpeg)$' 將匹配任何以 .jpg 或 .jpeg 副檔名結尾的檔案。模式中的 '|' 符號告訴引擎按順序嘗試這兩種替代方案。

import re

files = ["file.jpg", "file.jpeg", "file.txt"]

for file in files:
    if re.search(r'\.(jpg|jpeg)$', file):
        print(f"Found a match: {file}")

輸出

Found a match: file.jpg
Found a match: file.jpeg

匹配不同的日期格式

假設我們有一組不同格式的日期字串,並且我們想要過濾掉那些採用 "月 日,年" 格式的日期。我們可以使用正則表示式替代建立靈活的模式

示例

假設我們有一組不同格式的日期字串,並且我們想要過濾掉那些採用 "月 日,年" 格式的日期。我們可以使用正則表示式替代建立靈活的模式

import re

dates = ["January 1, 2022", "1/1/2022", "2022-01-01", "Jan 1, 2022"]

for date in dates:
    if re.search(r'^(\w+)\s+(\d+),\s+(\d{4})$', date.strip()):
        print(f"Found a match: {date}")

輸出

Found a match: January 1, 2022
Found a match: Jan 1, 2022

匹配多個電子郵件地址格式

假設我們有一組可能包含電子郵件地址的字串,並且我們想要過濾掉那些實際上有效的電子郵件地址。我們可以使用正則表示式替代建立匹配多個電子郵件地址格式的模式

示例

在此示例中,正則表示式模式 r'^[\w!#$%&'()*+,;^`{|}]+.\w!#$%&'()*+,;^`{|}]+@(([A−Za−z0−9−]+.)+[A−Za−z]{2,}|(\d{1,3}.){3}\d{1,3}(:\d{1,5})?)$' 將匹配任何根據廣泛接受的電子郵件地址規範 (RFC 5322) 而言有效的電子郵件地址字串。'|' 符號用於為電子郵件地址的域名部分建立替代方案(例如,IPv4 和 IPv6 地址)。

import re

email_list = ["[test@example.com](mailto:test@example.com)", "test@example.com"]

for email in email_list:
    if re.search(r'^[\w!#$%&'()*+`,;~^{|}~]+\.[\w!#$%&'()*+`,;~^{|}~]+@(([A-Za-z0-9-]+\.)+[A-Za-z]{2,}|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$', email):
        print(f"Found a valid email: {email}")

總之,Python 中的正則表示式替代提供了一種強大且靈活的方式來搜尋和操作文字資料。'|' 運算子使開發人員能夠建立可以匹配多個模式的表示式,從而大大增強了正則表示式的功能。通過了解 '|' 運算子的行為並學習如何有效地使用它,開發人員可以編寫更有效且用途廣泛的程式碼來解析和處理 Python 中的文字資料。隨著正則表示式繼續成為 Python 中文字操作的基石,掌握像 '|' 運算子這樣的替代方案對於任何尋求提高技能並建立健壯且可維護程式碼的 Python 開發人員來說都是必不可少的。

更新於: 2023-09-08

862 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.