詳解 Python 正規表示式

ViatorSun發表於2020-11-20

正規表示式 是對字串(a - z)& 特殊字元(稱為“元字元”)操作的一種邏輯公式。
就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對 文字 or 字串 的 一種過濾邏輯

正規表示式,又稱規則表示式(Regular Expression ,簡稱 re )。正規表示式主要用於

  • 檢查一個字串是否含有某個子串;
  • 也可以從字串中提取匹配的子串;
  • 或者對字串中匹配的子串執行替換操作;

# Re庫的主要功能:

函式功能
re .compile()根據一個模式字串和可選的標誌引數,生成一個正規表示式物件
re.search()在一個字串中搜尋匹配正規表示式的第一個位置,返回match物件
re.match()在一個字串的開始位置匹配正規表示式,返回match物件
re.findall()搜尋字串,以列表的形式返回全部能匹配的子串
re.split()將一個字串按照正規表示式匹配的結果進行分割,返回列表型別
re.finditer()搜尋字串,返回一個匹配的迭代型別,每個迭代元素是match物件
re.sub()在一個字串中替換所有匹配正規表示式的子串,返回替換後的字串
  • group() 返回被 re 匹配的 子串內容
  • span() 返回一個元組包含 子串 ( start , end ) 的位置
  • start() 返回匹配開始的位置(子串第一個字元的索引)
  • end() 返回匹配結束的位置(子串最後一個字元的索引+1 )

1、compile()

compile() 根據一個模式字串和可選的標誌引數,生成一個正規表示式物件( Pattern ),供 match() 替換 和 search() 匹配 這兩個函式使用。

# 函式語法:

re.compile( pattern [, flags] )

函式引數說明:

  • pattern:匹配的正規表示式;
  • flags:標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等;

2、re.match()

re.match 嘗試從字串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。

# 函式語法:

re.match(pattern, string, flags=0)

函式引數說明:

  • pattern:匹配的正規表示式;
  • string:要匹配的字串;
  • flags:標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等;
  • return:匹配成功返回一個元組,包含所有匹配字串的序號,序號從 1 開始,否則返回None
    span(n)方法:用於獲取第 n+1 個組的匹配位置;
    group(n)方法:用於獲取第 n+1 個組所匹配的子串內容;

3、re.search()

re.search 掃描整個字串,並返回 第一個 匹配 pattern 的匹配物件。

# 函式語法:

re.search(pattern, string, flags=0)

函式引數說明:

  • pattern:匹配的正規表示式
  • string:要匹配的字串。
  • flags:標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等;
  • return:匹配成功返回一個元組(第一處匹配 Pattern的匹配物件)包含所有匹配字串的序號,序號從 1 開始,否則返回None。
    span(n)方法:用於獲取第 n+1 個組的匹配位置;
    group(n)方法:用於獲取第 n+1 個組所匹配的子串內容;

re.match與re.search的區別

re.match 必須從字串開始處就匹配,如果字串開始不符合正規表示式,則匹配失敗,函式返回 None,
而 re.search 匹配整個字串,直到找到一個匹配。


4、re.sub()

re.sub 替換字串中的匹配項

# 函式語法:

re.sub(pattern, repl, string, count=0, flags=0)

函式引數說明:

  • pattern : 正則中的模式字串。
  • repl : 替換的字串,也可為一個函式。
  • string : 要被查詢替換的原始字串。
  • count : 模式匹配後替換的最大次數,預設 0 表示替換所有的匹配。
  • flags : 編譯時用的匹配模式,數字形式。

前三個為必選引數,後兩個為可選引數。


5、findall()

在字串中找到正規表示式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

# 函式語法:

re.findall(pattern, string, flags=0)
	or
pattern.findall(string [, pos[, endpos]])

函式引數說明:

  • pattern 匹配模式。
  • string 待匹配的字串。
  • pos 可選引數,指定字串的起始位置,預設為 0。
  • endpos 可選引數,指定字串的結束位置,預設為字串的長度。

6、re.finditer()

和 findall 類似,在字串中找到正規表示式所匹配的所有子串,並把它們作為一個迭代器返回。

# 函式語法:

re.finditer(pattern, string, flags=0)

函式引數說明:

  • pattern 匹配的正規表示式
  • string 要匹配的字串。
  • flags 標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

7、re.split()

split 方法按照能夠匹配的子串將字串分割後返回列表,它的使用形式如下:

# 函式語法:

re.split(pattern, string[, maxsplit=0, flags=0])

函式引數說明:

  • pattern 匹配的正規表示式
  • string 要匹配的字串。
  • maxsplit 分隔次數,maxsplit=1 分隔一次,預設為 0,不限制次數。
  • flags 標誌位,用於控制正規表示式的匹配方式,如:是否區分大小寫,多行匹配等等。

相關文章