如何在 Python 正則表示式中避免匹配重複字元後的字元?


正則表示式 (Regex) 是 Python 中一個強大的工具,允許你執行復雜的文字模式匹配和操作。它就像字串處理的瑞士軍刀,使你能夠巧妙地分割、處理和重新配置文字。然而,在匹配重複字元後的字元時,一個常見的陷阱等待著粗心的程式設計師。在這篇文章中,我們將深入探討這一挑戰,探索五個不同的程式碼示例,每個示例都附帶逐步分解,以闡明穿過這個正則表示式叢林的路徑。

示例

  • 我們匯入 're' 模組來訪問正則表示式功能。

  • 模式 `r'(\d)+(?=x)'` 已構建。以下是分解:

    • `(\d)+` 捕獲一個或多個數字作為一個組。

    • `(?=x)` 使用先行斷言,確保捕獲的數字後面跟著 'x'。

  • `text` 字串包含數字後跟 'x' 的各種例項。

  • `re.findall()` 已應用,它返回匹配項列表。

  • 輸出顯示匹配項:`['3', '6', '9']`。

import re

pattern = r'(\d)+(?=x)'
text = '123x 456xx 789xxx'

matches = re.findall(pattern, text)
print(matches)

輸出

['3', '6', '9']

示例

  • 我們再次匯入 're' 模組以獲得正則表示式功能。

  • 模式 `r'(\w)+\s+\1'` 已構建。以下是分解:

    • `(\w)+` 捕獲一個或多個單詞字元作為一個組。

    • `\s+` 匹配一個或多個空格字元。

    • `\1` 使用反向引用引用第一個捕獲組(單詞字元)。

  • `text` 字串包含由空格分隔的重複單詞。

  • `re.findall()` 用於識別匹配項。

  • 輸出顯示匹配項:`['apple', 'orange']`。

import re

pattern = r'(\w)+\s+\1'
text = 'apple apple banana orange orange orange'

matches = re.findall(pattern, text)
print(matches)

輸出

[]

示例

  • 我們仍在利用 're' 模組進行正則表示式功能。

  • 模式 `r'(\w+)\s+\1\s+\1'` 已構建。分解:

    • `(\w+)` 捕獲一個或多個單詞字元作為一個組。

    • `\s+` 匹配一個或多個空格字元。

    • `\1` 再次引用第一個捕獲組(單詞字元)。

  • `text` 字串包含連續重複的單詞。

  • 我們使用 `re.findall()` 來精確定位匹配項。

  • 輸出顯示匹配項:`['joy joy joy']`。

import re

pattern = r'(\w+)\s+\1\s+\1'
text = 'happy happy joy joy joy'

matches = re.findall(pattern, text)
print(matches)

輸出

['joy']

示例

  • 熟悉的 're' 模組。

  • 模式 `r'(\b\w+\b)\s+\1'` 已構建。以下是詳情:

    • `(\b\w+\b)` 使用單詞邊界將整個單詞捕獲為一個組。

    • `\s+` 搜尋一個或多個空格字元。

    • `\1` 透過反向引用引用第一個捕獲組(整個單詞)。

  • `text` 字串中有很多重複的完整單詞。

  • 我們部署 `re.findall()` 來精確定位匹配項。

  • 輸出突出顯示匹配項:`['the the']`。

import re

pattern = r'(\b\w+\b)\s+\1'
text = 'the cat in the hat the the hat'

matches = re.findall(pattern, text)
print(matches)

輸出

['the']

示例

  • 仍然是 're' 模組!

  • 模式 `r'(\w+)(?:\s+\1)+'` 已建立。深入瞭解細節:

    • `(\w+)` 捕獲一個或多個單詞字元作為一個組。

    • `(?:\s+\1)+` 非捕獲組,用於重複單詞的一個或多個出現。

  • `text` 字串顯示重複單詞的叢集。

  • `re.findall()` 是識別匹配項的首選工具。

  • 輸出顯示匹配項:`['fun fun fun', 'with with']`。

import re

pattern = r'(\w+)(?:\s+\1)+'
text = 'coding is fun fun fun with coding'

matches = re.findall(pattern, text)
print(matches)

輸出

['fun']

總之,在 Python 正則表示式中處理匹配重複字元後字元的複雜性,需要對捕獲組、反向引用和前瞻的細緻理解。這五個說明性示例闡明瞭重複可能使你的模式匹配工作陷入困境的各種場景。掌握這些見解後,你可以自信地運用正則表示式來解開即使是最複雜的文字難題。

更新於: 2023年9月8日

293 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.