天天看點

python-正則化基本文法

代碼 說明 舉例
. 比對除換行符外任意字元
[abc] 字元集合,隻能表示一個字元位置,比對所包含的任意一個字元 [abc]比對plain中的’a’
[^abc] 字元集合,隻能表示一個字元位置,比對除去集合内字元的任意字元 [^abc]可以比對plain中的p、l、a、i、或者n
[a-z] 字元範圍,也是個集合,表示一個字元的位置,比對所包含的任意一個字元 常用[A-Z][0-9]
[^a-z] 字元範圍,也是個集合,表示一個字元的位置,比對除去集合内字元的任意字元
\b 比對單詞邊界 \bb在文本中找到單詞中b開頭的b字元
\B 不比對單詞邊界 t\B包含t的單詞但是不以t結尾的t字元,例如write,\Bb不以b開頭的含有b的單詞,例如able
\d [0-9] 比對1位數字
\D [^0-9]比對一位非數字
\s 比對一位空白字元,包括換行符,制表符,空格[\f\r\n\t\v
\S 比對一位非空白字元
\w 比對[a-zA-Z0-9_]包括中文的子
\W 比對除\w之外的字元

重複

代碼 說明 舉例
* 表示前面的正規表達式會重複 單詞中有e然後後邊非空字元
+ 表示前邊的正規表達式重複至少一次 e\w+單詞中e後邊至少有一個非空字元
表示前邊的正規表達式會重複0次或1次 e\w?單詞中e後邊至多有一個非空字元
{n} 重複固定的n次 e\w{1}單詞中e後邊隻能有一個非空字元
{n,} 重複至少n次 e\w{1,}等價于e\w+ e\w{0,}等價于e\w* e\w{0,1}等價于e\w?
{n,m} 重複n到m次 e\w{1,10}單詞中e後邊至少1個,至多10個非空白字元

示例:

比對手機号碼:13552670000
\d{11}
比對中國座機025-83105736  0534-7777777
\d{3-4}-\d{7-8}
           
代碼 說明 舉例
x|y 比對x或者y wood took foot food 使用w|food 或者(w|f)ood
捕獲(pattern) 使用小括号指定一個子表達式,也叫分組,捕獲後會自動配置設定組号從1開始,可以改變優先級
\數字 比對對應分組 (very)\1比對very very 但捕獲的組group是very
(?:pattern)
?exp (?'name’exp 通過name通路分組 python文法必須是(?Pexp)

斷言

代碼 說明 舉例
(?=exp) 斷言exp一定在比對的右邊出現,也就是說斷言後邊一定跟個exp f(?=oo)f後邊一定有oo出現
(?<=exp) 斷言exp一定在比對的左邊出現,也就是說前面一定有個exp字首 (?<=t)ook ook前一定有t出現
(?!exp) 斷言exp一定不會出現在右側,也就是說斷言後面一定不是exp \d{3}(?!\d)比對3位數字 斷言3位數字後邊一定不能是數字
(?<!exp) 斷言exp一定不能出現在左側,也就是說斷言前面一定不能是exp (?<!f) ood ood的左邊一定不是f
(?#comment) 注釋

貪婪與非貪婪

代碼 說明 舉例
*? 比對任意次,但盡可能少重複
+? 比對至少一次,但盡可能少重複
?? 比對0次或1次 但盡可能少重複
{n,}? 比對至少n次 但盡可能少重複
{n,m}? 比對至少n次 至多m次 但盡可能少重複