掌握Python 正則表達式中的特殊字符

正則表達式是一種強大的文本模式匹配工具,常用於字符串的匹配、替換、分割等操作。Python內置re模塊提供了豐富的正則表達式方法。但是,正則表達式中有許多特殊字符需要特殊處理,掌握這些特殊字符對於使用正則表達式是非常重要的。

一、元字符

元字符是正則表達式中最基本的概念。Python中最常用的元字符包括:.、^、$、*、+、?、{}、|、[]、()。下面我們詳細說明這些元字符。

. (點號)

點號可以匹配任意單個字符,但是不能匹配換行符(\n)。例如,正則表達式 a.b 可以匹配字符串 “acb”、”a2b”、”a#b” 等,但不能匹配 “a
b”。

^ (脫字符)

脫字符匹配字符串的開頭。例如,正則表達式 ^a 匹配以字母 a 開頭的字符串,但是不能匹配 aaaaaa。

$ (美元符號)

美元符號匹配字符串的結尾。例如,正則表達式 a$ 匹配以字母 a 結尾的字符串,但是不能匹配 aaaaaa。

* (星號)

星號表示匹配前面的字符0次或多次。例如,正則表達式 a*b 可以匹配 “b”、”ab”、”aab” 等字符串。

+ (加號)

加號表示匹配前面的字符1次或多次。例如,正則表達式 a+b 可以匹配 “ab”、”aab” 等字符串,但是不能匹配字符串 “b”。

? (問號)

問號表示匹配前面的字符0次或1次。例如,正則表達式 a?b 可以匹配 “b” 和 “ab”兩個字符串。

{m,n}

大括號表示匹配前面的字符m次到n次(包括m和n)。例如,正則表達式 a{2,4}b 可以匹配 “aab”、”aaab”、”aaaab” 三個字符串。

| (管道符號)

管道符號表示「或」關係。例如,正則表達式 a|b 可以匹配 “a” 或 “b”。

[] (字符集)

字符集表示匹配方括號中任意一個字符。例如,正則表達式 [abc] 表示匹配字符 “a”、”b” 或 “c”。

() (分組)

圓括號表示將其中的字符看成一個整體,可以在其中使用|、*、+、?、{}等元字符。例如,正則表達式 (ab)+ 可以匹配 “ab”、”abab”、”ababab” 等字符串。

二、轉義字符

在正則表達式中,有些特殊字符需要用反斜杠進行轉義才能正確匹配。Python中最常用的轉義字符包括:\d、\D、\s、\S、\w、\W、\b、\B、\\。

\d

\d 表示匹配所有數字。例如,正則表達式 \d+ 可以匹配任意一個數字串。

\D

\D 表示匹配所有非數字字符。例如,正則表達式 \D+ 可以匹配任意一個非數字串。

\s

\s 表示匹配所有空白字符,包括空格、製表符、換行符等。例如,正則表達式 \s+ 可以匹配任意一個空白符串。

\S

\S 表示匹配所有非空白字符。例如,正則表達式 \S+ 可以匹配任意一個非空白符串。

\w

\w 表示匹配所有字母、數字和下劃線。例如,正則表達式 \w+ 可以匹配任意一個標識符。

\W

\W 表示匹配所有非字母、數字和下劃線的字符。例如,正則表達式 \W+ 可以匹配任意一個非標識符。

\b

\b 表示匹配單詞的邊界。例如,正則表達式\b\w+\b 可以匹配任意一個單詞。

\B

\B 表示匹配非單詞邊界。例如,正則表達式\Bcat\B 可以匹配 “concat”、”cat123” 等字符串。

\\

用於轉義字符本身。例如,正則表達式 \\+ 可以匹配一個反斜杠。

三、貪婪匹配和非貪婪匹配

正則表達式中的元字符默認是「貪婪」的,即儘可能多地匹配字符。例如,正則表達式 A.*B 可以匹配字符串 “A1B2C3D4B” 中的 A1B2C3D4。

非貪婪匹配也稱為懶惰匹配或最小匹配,即儘可能少地匹配字符。在貪婪匹配的元字符後面加上?即可實現非貪婪匹配。例如,正則表達式 A.*?B 可以匹配字符串 “A1B2C3D4B” 中的 A1B2。

四、示例代碼

import re

# 元字符示例
pattern = "a.b"
print(re.match(pattern, "acb")) # 匹配成功
print(re.match(pattern, "a 
b")) # 匹配失敗 pattern = "^a" print(re.match(pattern, "abcd")) # 匹配成功 print(re.match(pattern, "bcda")) # 匹配失敗 pattern = "a$" print(re.match(pattern, "abcd")) # 匹配失敗 print(re.match(pattern, "bcda")) # 匹配成功 pattern = "a*b" print(re.match(pattern, "b")) # 匹配成功 print(re.match(pattern, "abab")) # 匹配成功 print(re.match(pattern, "c")) # 匹配失敗 pattern = "a+b" print(re.match(pattern, "ab")) # 匹配成功 print(re.match(pattern, "aab")) # 匹配成功 print(re.match(pattern, "b")) # 匹配失敗 pattern = "a?b" print(re.match(pattern, "b")) # 匹配成功 print(re.match(pattern, "ab")) # 匹配成功 print(re.match(pattern, "ac")) # 匹配失敗 pattern = "a{2,4}b" print(re.match(pattern, "aab")) # 匹配成功 print(re.match(pattern, "aaab")) # 匹配成功 print(re.match(pattern, "aaaab")) # 匹配成功 print(re.match(pattern, "ab")) # 匹配失敗 pattern = "a|b" print(re.match(pattern, "a")) # 匹配成功 print(re.match(pattern, "b")) # 匹配成功 print(re.match(pattern, "c")) # 匹配失敗 pattern = "[abc]" print(re.match(pattern, "a")) # 匹配成功 print(re.match(pattern, "b")) # 匹配成功 print(re.match(pattern, "d")) # 匹配失敗 pattern = "(ab)+" print(re.match(pattern, "ababab")) # 匹配成功 print(re.match(pattern, "ab")) # 匹配成功 print(re.match(pattern, "ac")) # 匹配失敗 # 轉義字符示例 pattern = "\d+" print(re.match(pattern, "123abc")) # 匹配成功 print(re.match(pattern, "abc")) # 匹配失敗 pattern = "\D+" print(re.match(pattern, "123abc")) # 匹配失敗 print(re.match(pattern, "abc")) # 匹配成功 pattern = "\s+" print(re.match(pattern, " abc")) # 匹配成功 print(re.match(pattern, "abc")) # 匹配失敗 pattern = "\S+" print(re.match(pattern, " abc")) # 匹配失敗 print(re.match(pattern, "abc")) # 匹配成功 pattern = "\w+" print(re.match(pattern, "def_123")) # 匹配成功 print(re.match(pattern, "!@#")) # 匹配失敗 pattern = "\W+" print(re.match(pattern, "def_123")) # 匹配失敗 print(re.match(pattern, "!@#")) # 匹配成功 pattern = r"\b\w+\b" print(re.findall(pattern, "Hello, world!")) # ['Hello', 'world'] pattern = r"\Bcat\B" print(re.search(pattern, "concat")) # None print(re.search(pattern, "cat123")) # None # 貪婪匹配和非貪婪匹配示例 pattern = "A.*B" print(re.match(pattern, "A1B2C3D4B")) # 匹配成功 pattern = "A.*?B" print(re.match(pattern, "A1B2C3D4B")) # 匹配成功

原創文章,作者:TDLP,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/138823.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TDLP的頭像TDLP
上一篇 2024-10-04 00:21
下一篇 2024-10-04 00:21

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論