[TOC] 正則表達式 Regular Expression ,縮寫regex,regexp,RE等 正則表達式式文本處理的重要技術,用它可對字元串按照某種規則進行檢索 元字元 代碼|說明 |舉例 : :|: :|: : [abc]|表示一個字元位置,匹配字元集合中的任意一個字元 | [abc]匹配 ...
目錄
正則表達式
Regular Expression ,縮寫regex,regexp,RE等
正則表達式式文本處理的重要技術,用它可對字元串按照某種規則進行檢索
元字元
代碼 | 說明 | 舉例 |
---|---|---|
[abc] | 表示一個字元位置,匹配字元集合中的任意一個字元 | [abc]匹配apple中的'a' |
[^abc] | 表示一個字元位置,匹配除去集合內字元的任意一個字元 | [^abc]匹配apple中的'p''p''l''e' |
[a-z] | 表示一個字元位置,表示匹配範圍內的字元(閉區間) | [a-z][0-9] |
[^a-z] | 表示一個字元位置,表示除去範圍內的字元(閉區間) | [^a-z][^0-9] |
\d | 表示一個字元位置,[0-9]中一個數字 | |
\D | 表示一個字元位置,表示[^0-9]中非數字 | |
\s | 表示一個字元位置,匹配一個空白字元包括換行,製表符,空格[\f\r\n\t\v] | |
\S | 表示一個字元位置,匹配一個非空白字元 | |
\w | 表示一個字元位置,匹配[a-zA-Z0-9]包括中文 | |
\W | 表示一個字元位置,匹配\w之外的字元 | |
. | 表示一個字元位置,匹配除換行符外任意一個字元 | abc. .abc |
* | *前一個字元可以重覆0到無數次 | |
+ | +前一個字元重覆至少一次 | |
? | ?前一個字元重覆0次或者一次 | |
^ | 表示以xxx開頭 | ^ab 表示以ab開頭的 |
$ | 以xxx結尾 | ab$ 表示以ab結尾的 |
{n} | 重覆固定n次 | e\w{1}單詞中e後面只能有一個非空白字元 |
{n,} | 重覆至少n次 | e\w{1,}等價於e\w+ |
\b | 匹配的單詞的邊界 | \bb找到文本中b開頭的單詞 |
x|y | 匹配x或者y |
沒寫一個字元位置的就是一個或多個字元位置
- 單行模式:.可以匹配所有字元,包括換行符,^表示整個字元串的開頭,$表示整個字元串的結尾 使用re.S進入單行模式
多行模式:.可以匹配存了換行符之外的字元 ,^表示行首,$表示行尾.開始指的是\n後緊接著下一個字元,結束指的是\n前的字元 預設多行模式
捕獲(分組)
s = 'abc abcd abcfdd'
print(re.findall('a(.)c(d)', s))
>>>[('b', 'd')]
只返回a後面有東西,c後面有d 匹配後返回二元組列表
貪婪模式
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*g', s))
>>>['abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg']
非貪婪模式
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*?g', s))
>>>['abcdefg']
re模塊
常量
常量 | 說明 |
---|---|
re.M | 多行模式 |
re.S | 單行模式 |
re.I | 忽略大小寫 |
re.X | 忽略表達式中空白字元 |
使用| 位或運算開啟多種選項
方法
編譯
re.complile(pattern,flags=0)
設定flags,編譯模式,返回正則表達式對象regex。
pattern就是正則表達式字元串,flags是選項。正則表達式需要被編譯。
單次匹配
re.match(pattern,string,flag=0)
從字元串開頭開始匹配,返回match對象
re.search(pattern,string,flag=0)
從頭搜索第一個匹配,返回match對象
全文搜索
re.findall(pattern,string,flag=0)
對整個字元串,從左至右匹配,返回所有匹配項列表
匹配替換
re.sub(pattern,replacement,string,flag=0)
將匹配字元轉用replacement代替,返回新字元串
re.subn(pattern,replacement,string,count = 0flag=0)
返回一個元組,count顯示替換了多少次