Python編程核心技術之正則表達式(regex) 一.正則表達式簡介 正則表達式(regex)為高級的文本模式匹配、抽取、與/或文本形式的搜索和替換功能提供了基礎。簡單的來說正則表達式是一些由字元和特殊符號組成的字元串,他們描述了模式的重覆或者表述多個字元,於是正則表達式能夠按照某種模式匹配一系列 ...
Python編程核心技術之正則表達式(regex)
一.正則表達式簡介
正則表達式(regex)為高級的文本模式匹配、抽取、與/或文本形式的搜索和替換功能提供了基礎。簡單的來說正則表達式是一些由字元和特殊符號組成的字元串,他們描述了模式的重覆或者表述多個字元,於是正則表達式能夠按照某種模式匹配一系列有相似特征的字元
串。即能匹配多個字元串。在Python中通過標準庫中的re模塊來支持正則表達式。
註釋:在Python中有兩種方法完成模式匹配:搜索和匹配。搜索:通過search()函數在字元串的任意部分中搜索匹配模式。匹配:通過調用math()函數判斷一個字元串能否從起始處全部或者部分的匹配某個模式。
二.常見正則表達式符號和特殊字元
符號 說明 正則表達式模式 匹配的字元串
literal 匹配字元串的值 foo foo
| 匹配多個正則表達式模式 bat|bet|bit bat,bet,bit
. 匹配任意一個字元(換行符\n除外) f.o 在f和o之間具有任何一個字元的字元串
^ 匹配字元串的開始 ^From 任何以From開始的字元串
$ 匹配字元串的結尾 end$ 任何以end結束的字元串
[...] 匹配[]中的任意一個字元 b[aeiu]t bat,bet,bit,but
[x-y] 匹配從字元x到y中的任意一個字元 [0-9][a-zA-Z] 0到9之間的任何一個數字和任何一個字母組成的字元串
[^...] 不匹配此字元集中出現的任何一個字元 [^aeiou] 一個非母音字元
* 匹配前面的正則表達式零次或多次 t[dn]*o t和o之間有任意多個d或n組成的字元串,
例如to,tdo,tno,tdno,tddo,tndno等
+ 匹配前面的正則表達式一次或多次 t[dn]+o t和o之間有至少一個d或n組成的字元串,
例如tdo,tno,tdno,tddo,tndno等
? 匹配前面的正則表達式零次或一次 [dn]ot? do,no,dot,not
{N} 匹配前面的正則表達式N次 [0-9]{16} 任何一個16位數字
{M,N} 匹配前面的正則表達式M次到N次 [0-9]{15,16} 任何一個15位或16位數字
(*|+|?|{})? 上面4個重覆匹配符號(*,+,?,{})的非貪心版本,即儘可能少的匹配消耗字元,留下儘可能多的字元給後面的模式
() 匹配()中的正則表達式,並保存為子組 f(oo|u)bar
三.常用的用法簡介
1.使用擇一匹配符號匹配多個正則表達式模式。
表示擇一匹配的管道符號(|),豎線。表示一個從多個模式中選擇其一的操作模式。用於分割不同的正則表達式。擇一匹配也稱作並或者邏輯或。
2.匹配任意單個字元。
點號或者句號能匹配出了換行符以外的任何字元(在Python中有一個編譯標記【S或者DOTALL】可以推翻這個限制)。
3.從字元串起始或者結尾或單詞邊界匹配。
如果要匹配字元串的開始位置,就必須要用脫字元(^)或者特殊字元\A。如果要匹配字元串的末尾位置,就要用美元符($)或者\Z。
4.特殊字元\b和\B可以用來匹配字元邊界。
\b用於匹配一個字元的邊界,任何一個以\b之後字元串開始的字元串。\B用來匹配任何包含而不以\B後字元串作為其實的字元串。
5.創建字元集。
某些時候想要匹配某些特定的字元。方括弧可以匹配一對方括弧之內的任何字元。
6.限定範圍和否定。
字元集還支持匹配指定的字元範圍。方括弧中兩個符號中間用連字元(—)連接,用於指定一個範圍。另外,如果脫字元(^)緊隨左方括弧後面,這個符號就表示不匹配給定字元集中的任何一個字元。
7.使用閉包操作符實現存在性和頻數匹配。
星號或者星號操作符(*)將匹配其左邊的正則表達式出現零個或者多次的情況。
加號操作符(+)將匹配一次或者多次出現的正則表達式。
問號操作符(?)將匹配零次或者一次出現的正則表達式。
大括弧操作符({})裡面是一對逗號分隔值。將會最精確的匹配前面正則表達式N次後者一定範圍的次數。
8.表示字元集的特殊字元。
可以用d表示任何十進位數。另一個特殊字元(\w)表示全部的字母或者數字的字元集。(\s)表示空格符這些特殊字元的大寫則表示不匹配相應的字元集。
9.使用圓括弧指定分組。
當時用正則表達式時,一對圓括弧可以實現以下任意一個功能:對正則表達式進行分組或匹配子組。