如何在 Python 中使用正則表示式匹配單詞?


掌握正則表示式及其“re”模組,將開啟 Python 中強大的文字處理功能。正則表示式,通常稱為 regex,使我們能夠識別、搜尋和操作字串中的特定模式。在我們工作中經常遇到的一個常見任務是使用正則表示式在文字中匹配特定單詞。在本文中,我們將深入探討在 Python 中使用正則表示式查詢和匹配字串中單詞的技巧。我們將透過一些程式碼示例來探索這個領域,每個示例後面都跟著分步說明,這將肯定能指導您踏上使用 regex 進行單詞匹配的激動人心的旅程。

匹配簡單的單詞

示例

  • 在第一個程式碼示例中,我們首先匯入“re”模組;此模組允許我們在 Python 中使用正則表示式。我們的目標是在給定的文字中匹配單詞“fox”。

  • 要建立正則表示式模式,我們使用 re.escape() 函式來確保單詞中的任何特殊字元都被視為字面字元。如果單詞包含正則表示式元字元,則這對於避免意外行為至關重要。

  • 模式 r"\b" + re.escape(word_to_match) + r"\b" 使用 \b 單詞邊界錨點將單詞“fox”匹配為完整單詞。\b 錨點確保該單詞不是較長單詞的一部分,並且它被非單詞字元或字串的開頭/結尾包圍。

  • 接下來,我們使用 re.search() 函式查詢文字中單詞的第一次出現。如果找到匹配項,我們使用 match.group() 輸出匹配的單詞。否則,我們列印“未找到單詞”。

import re

# Sample text
text = "The quick brown fox jumps over the lazy dog."

# The word we want to match
word_to_match = "fox"

# Regular expression pattern to match the word
pattern = r"\b" + re.escape(word_to_match) + r"\b"

# Find the word in the text
match = re.search(pattern, text)

# Output the match
if match:
    print("Word found:", match.group())
else:
    print("Word not found.")

輸出

Word found: fox

不區分大小寫的單詞匹配

示例

  • 在此程式碼片段中,我們有一個示例文字,其中提到了 Python 程式語言。我們的目標是不區分大小寫地匹配單詞“Python”。這意味著正則表示式應該查詢“Python”,無論它在文字中是作為“Python”還是“python”出現。

  • 為了實現不區分大小寫,我們在 re.search() 函式的第三個引數中使用 re.IGNORECASE 標誌。此標誌指示正則表示式引擎在搜尋單詞時忽略大小寫。

  • 其餘程式碼與前面的示例類似。我們使用單詞邊界錨點建立正則表示式模式,並使用 re.escape() 來確保安全匹配單詞。然後,我們執行搜尋並相應地輸出結果。

import re

# Sample text
text = "The Python programming language is versatile and powerful."

# The word we want to match (case-insensitive)
word_to_match = "python"

# Regular expression pattern for case-insensitive word matching
pattern = r"\b" + re.escape(word_to_match) + r"\b"

# Find the word in the text (case-insensitive)
match = re.search(pattern, text, re.IGNORECASE)

# Output the match
if match:
    print("Word found:", match.group())
else:
    print("Word not found.")

輸出

Word found: Python

匹配具有不同拼寫形式的單詞

示例

  • 在此示例中,我們有一個示例文字,其中包含單詞“color”和“colour”的不同拼寫形式。我們的任務是匹配這兩種拼寫形式,而不管大小寫如何。

  • 為了匹配不同的拼寫形式,我們使用 |(管道)符號建立正則表示式模式來表示 OR 運算子。這使我們能夠為單詞指定備選拼寫。我們還包含 re.IGNORECASE 標誌以確保不區分大小寫匹配。

  • 模式 r"\b(" + re.escape(word_to_match) + r")\b" 以及單詞邊界錨點確保我們匹配整個單詞,而不是單詞的一部分。

  • 我們使用 re.findall() 查詢文字中不同拼寫形式的所有出現情況,並將匹配項儲存在 matches 變數中。最後,我們輸出匹配的單詞,用逗號和空格將它們連線起來。

import re

# Sample text with variant spellings of a word
text = "Color or colour, which one do you prefer?"

# The word we want to match (variant spellings)
word_to_match = "color|colour"

# Regular expression pattern to match variant spellings
pattern = r"\b(" + re.escape(word_to_match) + r")\b"

# Find the word in the text
matches = re.findall(pattern, text, re.IGNORECASE)

# Output the matches
if matches:
    print("Words found:", ", ".join(matches))
else:
    print("Word not found.")

輸出

Word not found.

匹配帶有字首或字尾的單詞

示例

  • 在倒數第二個示例中,我們有一個包含帶有字首或字尾的單詞的示例文字。我們的目標是匹配單詞“uncomplete”,而不管它是否帶有任何字首或字尾出現。

  • 為了實現這一點,我們在想要匹配的單詞的兩側使用 \w*(零個或多個單詞字元)建立正則表示式模式。re.IGNORECASE 標誌確保不區分大小寫匹配。

  • 模式 r"\b\w*" + re.escape(word_to_match) + r"\w*\b" 使用單詞邊界錨點以及 \w* 來匹配整個單詞,即使它在前後有字元。

  • 我們使用 re.findall() 查詢文字中帶有字首或字尾的單詞的所有出現情況,並將匹配項儲存在 matches 變數中。最後,我們輸出匹配的單詞,用逗號和空格將它們連線起來。

import re

# Sample text with words having prefixes or suffixes
text = "The project is uncompleted, but they're working on it."

# The word with prefixes or suffixes we want to match
word_to_match = "uncomplete"

# Regular expression pattern to match word with prefixes or suffixes
pattern = r"\b\w*" + re.escape(word_to_match) + r"\w*\b"

# Find the word in the text
matches = re.findall(pattern, text, re.IGNORECASE)

# Output the matches
if matches:
    print("Words found:", ", ".join(matches))
else:
    print("Word not found.")

輸出

Words found: uncompleted

匹配長度可變的單詞

示例

  • 在最後一個示例中,我們有一個示例文字,其中在不同的上下文中提到了單詞“sun”。我們的任務是在文字中匹配單詞“sun”,而不管其位置或長度如何。

  • 為了實現這一點,我們使用單詞邊界錨點 `\b` 建立正則表示式模式,以確保我們匹配整個單詞。像往常一樣,我們使用 `re.escape()` 安全地處理單詞中的任何特殊字元,並使用 `re.IGNORECASE` 進行不區分大小寫匹配。

  • 模式 `r"\b" + re.escape(word_to_match) + r"\b"` 將匹配單詞“sun”在任何作為完整單詞出現的地方。

  • 我們使用 `re.findall()` 查詢文字中單詞“sun”的所有出現情況,無論其位置或長度如何。匹配項儲存在 `matches` 變數中,我們輸出它們,用逗號和空格將單詞連線起來。

import re

# Sample text with words of varying lengths
text = "The sun sets early in summer, but late in winter."

# The word we want to match with variable lengths
word_to_match = "sun"

# Regular expression pattern to match word with variable lengths
pattern = r"\b" + re.escape(word_to_match) + r"\b"

# Find the word in the text
matches = re.findall(pattern, text, re.IGNORECASE)

# Output the matches
if matches:
    print("Words found:", ", ".join(matches))
else: print("Word not found.")

輸出

Words found: sun

總之,在本文中,您已經瞭解瞭如何在 Python 中利用正則表示式的強大功能來查詢和匹配字串中的單詞。正則表示式提供了一種靈活且有效的方法來處理文字。此過程使您能夠輕鬆地執行復雜的搜尋和操作。

在整篇文章中,您已經意識到我們探索了一些實用的程式碼示例,其中展示了使用正則表示式進行單詞匹配的各個方面。我們學習了各種任務,例如如何匹配簡單的單詞、執行不區分大小寫匹配、處理不同的拼寫形式、查詢帶有字首或字尾的單詞,甚至匹配長度可變的單詞。

隨著您繼續練習和試驗正則表示式,您將更深入地瞭解其功能。您將成為文字處理任務中建立強大模式的專家。Regex 是您 Python 工具包中一項寶貴的工具,有了它,您肯定能夠應對資料分析、網頁抓取、自然語言處理等領域的各種挑戰。

請注意,您必須不斷磨練自己的技能,並探索在專案中使用正則表示式的新方法。願您與正則表示式的旅程引導您在 Python 程式設計的世界中發現新的和令人興奮的可能性!

更新於: 2023-09-08

3K+ 閱讀量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告