Python--正則表達式

正則表達式

概述

正則表達式是文本處理極爲重要的技術,用它可以對字符串按照某種規則進行檢索、替換。

分類

  1. BRE
    基本正則表達式,grep、sed、vi等軟件支持。
  2. ERE
    擴展正則表達式,egrep ( grep -E )、sed -r等。
  3. PCRE
    幾乎所有高級語言都是PCRE的變種。Pythoncong1.6開始使用SRE正則表達式引擎,可以認爲是PCRE的子集,見模塊re。

基本語法

元字符 metacharacter

代碼 說明 舉例
. 匹配除換行符外的任意一個字符 .
[abc] 字符集合,只能表示一個字符位置。匹配所包含的任意一個字符 [abc]匹配plain中的’a’
[^abc] 字符集合,只能表示一個字符位置。匹配除去集合內字符的任意一個字符 [^abc]可以匹配plain中的’p’,’l’,’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]匹配以爲數字
\D [^0-9]匹配一位非數字
\s 匹配1位空白字符,包含換行符、製表符、空格
\S 匹配1位非空白字符
\w 匹配[a-zA-Z0-9_],包括中文的子
\W 匹配\w之外的字符

轉義

凡是在正則表達式中有特殊意義的符號,如果想使用它的本意,請使用\轉義。反斜槓自身,需要使用\\
\r,\n還是轉以後代表、換行

重複

代碼 說明 舉例
* 表示前面的正則表達式會重複0次或多次 e\w*單詞中e後面可以有非空字符
+ 表示前面的正則表達式重複至少1次 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,n} 重複n到m次 e\w{1,10} 單詞中e後面至少1個,至多10個非空白字符

捕獲

代碼 說明 舉例
x y 匹配x或者y
(pattern) 使用小括號指定一個自表達式,也叫分組 捕獲後會自動分配組號從1開始,可以改變優先級
\數字 匹配對應的分組 (very)\1 匹配 very very, 但是捕獲的組group是very
(?:pattern 如果僅僅是爲了改變優先級,就不需要捕獲分組 (?:w
(?exp)(?’name’exp) 分組捕獲,但是可以通過那麼訪問分組 Python語法必須是(?Pexp)

斷言

代碼 說明 舉例
(?=exp) 零寬度正預測先行斷言 斷言exp一定在匹配的右邊出現,也就是斷言後面一定跟着exp f(?=oo) f後面一定有oo出現
(?<=exp) 零寬度正回顧後發斷言 斷言exp一定出現在匹配的左邊出現,也就是說前面一定有個exp前綴 (?<=f)ood,(?<=t)ook 分別匹配ood,ook,ook前一定有t出現
(?!exp) 零寬度正預測先行斷言 斷言exp一定不會在匹配的右邊出現,也就是斷言後面一定不是exp \d{3}(?!\d)匹配3位數字斷言3位數字後面一定不是數字 foo(?!d) foo後面一定不是d
(? 零寬度正回顧後發斷言 斷言exp一定不會在匹配的左邊出現,也就是說前面一定不是exp (?

貪婪模式

默認貪婪模式,也就是儘量多的匹配字符串
非貪婪模式,在重複的符號後面加上一個 ? 問號,就可以儘量的少匹配了。

代碼 說明
*? 匹配任意次,但儘可能少重複
+? 匹配至少1次,但是儘可能少重複
?? 匹配0次或者1次,但儘可能少重複
{n,}? 匹配至少n次,但儘可能少重複
{n,m}? 匹配至少n次,至多m次,但儘可能少重複

引擎選項

代碼 說明 Python
IgonreCase 匹配時忽略大小寫 re.I re.IGNORECASE
Singleline 單行模式,可以匹配多有字符,包括\n re.Sre.DOTALL
Multiline 多行模式^行首、$行尾 re.M re.MULTLINE
IgnorePatternWhitespace 忽略表達式中的空白字符,如果要使用空白字符需轉義,#可以用來做註釋 re.X re.VERBOSE

單行模式:將整個文本視爲一個字符串
. 可以匹配所有字符,包括換行符
^ 表示整個字符串的開頭,$表示整個字符串的結尾

多行模式:一行是一行
. 可以匹配除了換行符之外的字符
^ 表示行首 $ 表示行尾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章