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


Python 中的正則表示式模組提供了一個強大的工具,用於在 Python 字串中進行模式匹配。正則表示式,也稱為 regex,使我們能夠根據指定的模式搜尋、提取和操作文字。文字處理中一項常規且常見的任務是識別非單詞字元;這些字元包括符號、標點符號和空格。在本文中,我們將探討使用 Python 中的正則表示式識別和匹配這些非單詞字元的各種方法。我們將提供一些程式碼示例,每個示例後面都附有分步說明,以指導您完成在字串中查詢非單詞字元的過程。

匹配單個非單詞字元

示例

  • 在第一個示例中,我們首先匯入“re”模組;該模組為 Python 中的正則表示式提供支援。考慮一個名為 text 的示例字串,其中包含句子“Hello! How are you?”。我們的目標是在此字串中找到所有非單詞字元。

  • 正則表示式 r"\W" 用於匹配非單詞字元。\W 模式是一個簡寫字元類,匹配任何非字母數字字元(即不是字母、數字或下劃線)。它包括符號、標點符號和空格。

  • 然後,我們使用 re.findall() 函式搜尋文字字串中模式的所有出現。findall() 函式返回找到的所有匹配項的列表。

import re

# Sample string
text = "Hello! How are you?"

# Regular expression to match non-word characters
pattern = r"\W"

# Find all non-word characters in the string
matches = re.findall(pattern, text)

# Output the matches
print(matches)

輸出

['!', ' ', ' ', '?']

結果如您所見,是一個包含匹配的非單詞字元的列表:'!'、三個空格和'?'。

匹配多個非單詞字元

示例

  • 在此程式碼示例中,我們採用一個名為 text 的示例字串,其中包含句子“Regex is super−duper amazing!!!”。我們現在的任務是在字串中找到所有連續的非單詞字元序列。

  • 此處使用正則表示式 r"\W+"。如前所述,\W 模式匹配單個非單詞字元。+ 量詞表示我們希望匹配前面模式的一個或多個出現。因此,此表示式將匹配一個或多個非單詞字元的任何序列。

  • 我們像以前一樣使用 re.findall() 函式查詢文字字串中模式的所有出現。該函式將返回所有匹配序列的列表。

import re

# Sample string
text = "Regex is super-duper amazing!!!"

# Regular expression to match multiple non-word characters
pattern = r"\W+"

# Find all sequences of non-word characters in the string
matches = re.findall(pattern, text)

# Output the matches
print(matches)

輸出

[' ', ' ', '-', ' ', '!!!']

結果是一個包含匹配的非單詞字元序列的列表:一個空格、兩個連字元和三個感嘆號。

匹配非單詞字元(不包括空格)

示例

  • 在第三個示例中,我們有一個名為 text 的示例字串,其中包含句子“Let's keep it simple.”。我們現在的目標是在字串中找到所有非單詞字元,但不包括空格。

  • 正則表示式 r"[^\w\s]" 用於此目的。讓我們一步一步地分解它

  • \w 匹配任何字母數字字元(字母、數字和下劃線)。

  • \s 匹配任何空白字元(空格、製表符、換行符等)。

  • 模式開頭的 ^ 符號否定表示式,因此 [^\w\s] 匹配任何不是字母數字字元或空白字元的字元,有效地排除了空格。

  • 與之前一樣,我們使用 re.findall() 函式查詢文字字串中模式的所有出現,它將返回所有匹配的非單詞字元(不包括空格)的列表。

import re

# Sample string
text = "Let's keep it simple."

# Regular expression to match non-word characters excluding spaces
pattern = r"[^\w\s]"

# Find all non-word characters (excluding spaces) in the string
matches = re.findall(pattern, text)

# Output the matches
print(matches)

輸出

["'", '.']

結果是一個包含匹配的非單詞字元的列表:一個撇號和一個句號。

使用單詞邊界匹配非單詞字元

示例

  • 在這個特定示例中,我們有一個名為 text 的示例字串,其中包含句子“She said: 'I love regex!' and smiled.”。我們的目標是在字串中找到所有作為完整單詞出現的非單詞字元。

  • 正則表示式 r"\b\W+\b" 用於此任務。讓我們一步一步地分解它

  • \b 表示單詞邊界。它匹配單詞開頭或結尾處的空字串(其中單詞定義為字母數字字元和下劃線的序列)。

  • \W+ 匹配一個或多個非單詞字元。

  • \b\W+\b 確保我們僅在非單詞字元作為完整單詞出現時才匹配它們,而不是作為更大單詞的一部分。

  • \b\W+\b 確保我們僅在非單詞字元作為完整單詞出現時才匹配它們,而不是作為更大單詞的一部分。

import re

# Sample string
text = "She said: 'I love regex!' and smiled."

# Regular expression to match non-word characters using word boundaries
pattern = r"\b\W+\b"

# Find all non-word characters bounded by word boundaries
matches = re.findall(pattern, text)

# Output the matches
print(matches)

輸出

[' ', ": '", ' ', ' ', "!' ", ' ']

結果是一個包含匹配的非單詞字元的列表:一個冒號,前面和後面都有空格,一個撇號,前面和後面都有空格,以及一個感嘆號,前面和後面都有空格。

使用否定查詢沒有非單詞字元的單詞

示例

  • 在最後一個示例中,我們有一個名為 text 的示例字串,其中包含句子“I enjoy Python programming!”。現在,我們想找到字串中所有沒有非單詞字元的單詞。

  • 正則表示式 r"\b\w+\b" 用於此目的。讓我們一步一步地分解它

  • \b 表示單詞邊界,如前一個示例所述。

  • \w+ 匹配一個或多個字母數字字元(字母、數字和下劃線)。它有效地匹配不包含任何非單詞字元的完整單詞。

  • 使用 re.findall(),我們查詢文字字串中模式的所有出現,並返回一個不包含任何非單詞字元的匹配單詞列表。

import re

# Sample string
text = "I enjoy Python programming!"

# Regular expression to match words without any non-word characters
pattern = r"\b\w+\b"

# Find all words without any non-word characters
matches = re.findall(pattern, text)

# Output the matches
print(matches)

輸出

['I', 'enjoy', 'Python', 'programming']

我們獲得的結果是一個包含匹配單詞的列表:'I'、'enjoy'、'Python' 和'programming'。句子中的這些單詞完全由字母數字字元組成,並且沒有非單詞字元。

簡而言之,在本文中,我們探討了如何使用 Python 中的正則表示式識別和匹配字串中非單詞字元的不同方法。我們從簡單的示例開始,然後處理更復雜的示例;我們演示了識別非單詞字元的各種技術。透過使用正則表示式,可以有效地處理文字處理任務;這使得從字串中提取相關資訊變得更容易。

正則表示式為我們提供了一種靈活且強大的處理文字的方法;這使我們能夠執行復雜的搜尋和操作。隨著您熟悉正則表示式,您會意識到它們在多個領域都非常寶貴,包括文字處理、資料提取和資料驗證等。

必須注意,使用不同的示例進行練習並試驗正則表示式將提高您有效使用它們的能力。一開始處理正則表示式似乎令人生畏,但隨著時間的推移和實踐,您會發現自己越來越熟練地建立適合您特定需求的模式。

因此,大膽嘗試,探索,並享受掌握 Python 中正則表示式藝術的樂趣。在您的專案中釋放文字操作的真正潛力!

更新於: 2023年9月8日

1K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告