python 正則re學習筆記

2021-10-06 16:15:41 字數 4284 閱讀 4108

正規表示式,又稱規則表示式

正規表示式(regular expression)描述了一種字串匹配的模式(pattern)

1.        #代表原子表  儲存表示式  字元集合。匹配所包含的任意乙個字元

[a]   #匹配乙個字母a  

[abc] #匹配字母a/b/c

[a-z] #匹配任意一位小寫字母

[aabb] #匹配任意一位大小寫字母a/b

[a-za-z] #匹配任意一位字母

[0-9] #匹配任意一位數字

[a-za-z0-9] #匹配任意一位數字或字母

2. ^ #以什麼開頭   在原子表外開頭 以什麼...開頭 在原子表內 取反 相當於 \a

[^a-z] #小寫字母以外的字元

^a[a-za-z] #匹配 以字母a開頭的倆位字母

^[a-za-z]  #以任意一位字母開頭的字元

3. $ #以...結尾   ^和 $ 搭配來使用的 這樣才能夠真正的去限制你匹配的內容和長度 相當於\z

^1[3-8][0-9]$ #匹配手機號

^1[38][0-9]$ #匹配手機號

4. #表示前面的數量m個 不能單獨使用

[a][a][a] #匹配3個a

a [a-za-z] #匹配任意3位字母

^[a-za-z] #匹配任意3位字母作為開頭的字串

^[a-za-z][0-9]$

5.    #表示前面的數量m-n個 不能單獨使用

^[1-9][0-9]$#匹配qq號

6. #表示前面的數量至少m個 不能單獨使用

​7. ? #可有可無   匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。要匹配 ? 字元,請使用 \?

[1-9][0-9]?

[1-9][0-9]

-?[1-9]  #一位整數

8. . #匹配換行符\n以外的任意字元

​9. * #匹配前面字元任意次

​10. .* #匹配換行符以外任意字元任意次 (貪婪模式)

​11. .*? #匹配換行符以外任意字元任意次   (非貪婪模式)

​12. + #表示匹配數量 最少 1次

​13. .+ #表示匹配換行符 以外的任意字元 至少一次 (貪婪模式)

​14. .+? #表示匹配換行符 以外的任意字元 至少一次 (非貪婪模式)

15. () #1.乙個單元 2.子儲存

(?:pattern) #只做為乙個單元使用 而不是作為子儲存

(?=pattern) #返回不包含括號裡面的值

re.findall("windows(?=95|98|nt|2000)",'windowsnt')#windows

(?!pattern) #與上面的相反 只要後面的不相等 就會將前面的內容匹配返回

​16. | #表示或

常用組合

[.*?]

[\s\s]

貪婪:下面的表示式匹配從開始小於符號 (<) 到關閉 h1 標記的大於符號 (>) 之間的所有內容。

/<.*>/
非貪婪:如果您只需要匹配開始和結束 h1 標籤,下面的非貪婪表示式只匹配 。

/<.*?>/
如果只想匹配開始的 h1 標籤,表示式則是:

/<\w+?>
re.i #忽略大小寫

re.m #多行模式 改變 ^和$的行為

re.s #改變點的行為 可以使.匹配換行符

\d 0-9 相當於[0-9]

\d 取反 相當於[^0-9]

\w 相當於 [a-za-z0-9_]

\w 取反 [^a-za-z0-9_]

\s 匹配空白字元

\s 匹配非空白字元

普通字元包括沒有顯式指定為元字元的所有可列印和不可列印字元。這包括所有大寫和小寫字母、所有數字、所有標點符號和一些其他符號。

非列印字元也可以是正規表示式的組成部分。下表列出了表示非列印字元的轉義序列:

字元描述

\cx匹配由x指明的控制字元。例如, \cm 匹配乙個 control-m 或回車符。x 的值必須為 a-z 或 a-z 之一。否則,將 c 視為乙個原義的 'c' 字元。

\f匹配乙個換頁符。等價於 \x0c 和 \cl。

\n匹配乙個換行符。等價於 \x0a 和 \cj。

\r匹配乙個回車符。等價於 \x0d 和 \cm。

\s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。

\s匹配任何非空白字元。等價於 \f\n\r\t\v。

\t匹配乙個製表符。等價於 \x09 和 \ci。

\v匹配乙個垂直製表符。等價於 \x0b 和 \ck。

^[a-za-z0-9_]$      // 所有包含乙個以上的字母、數字或下劃線的字串 

^[1-9][0-9]$        // 所有的正整數

^\-[0-9]$      // 所有的整數

^[-]?[0-9]+\.?[0-9]+$   // 所有的浮點數

​^[a-za-z0-9_]+$      // 所有包含乙個以上的字母、數字或下劃線的字串

^[1-9][0-9]*$        // 所有的正整數

^\-?[0-9]+$          // 所有的整數

^\-?[0-9]+\.?[0-9]*$ // 所有的浮點數

#以上正負整數浮點數的簡寫

^\-?[0-9]\.?[0-9]$

使用正則 需要匯入 re 正則模組

(1) re.match(正則,字串,修正符)

匹配成功返回 匹配的物件

使用group()方法 獲取到匹配的值

groups() 返回乙個包含所有小組字串的元組,從 1 到 所含的小組號。

匹配失敗 返回 none

注意:從第一位開始匹配

只匹配一次

#給當前匹配到的結果起別名

s = '3g4hfd567'

re.match("(?p\d+)",s)

print(x.group(0))

print(x.group('value'))

(2) re.search(正則,字串,修正符)

匹配成功返回 匹配的物件 使用group()方法 獲取到匹配的值

匹配失敗 返回 none

注意:只要字串包含就可以

只匹配一次

(3) re.findall(正則,字串,修正符)

匹配成功返回列表

注意:匹配多次

(4) re.sub/re.subn 正則的替換

sub(正則,替換成誰,字串,替換的次數) 返回匹配後的結果

subn(正則,替換成誰,字串,替換的次數) 返回匹配後的結果和次數

例項

import re

# 將匹配的數字乘於 2

def double(matched):

value = int(matched.group('value'))

return str(value * 2)

s = 'a23g4hfd567'

print(re.sub('(?p\d+)', double, s))

(5) re.finditer 將查詢結果變成 迭代器 的形式 返回 配合next方法來使用

next()

走完以後 返回 stopiteration

(6) re.split 正則拆分

re.split("\w",mystr)

(7) preg = re.compile("1[3-8][0-9]")

以後使用 這種方式 居多 將正則 和函式 分開 執行效率 要高

使用方法re.compile("正則","修正符")

轉換的正則物件.正則的函式(字串)\

修正符的區別:

re.i(ignorecase) #不區分大小寫

re.s(dotall)  #改變點的行為

re.m(multiline)  #多行模式

Python筆記 re(正則)筆記

import rere.findall 返回匹配結果 列表 re.sub 替換字元 根據正則規則替換 re.compile 編譯正規表示式 當需要多次使用時更效率 re.findall 今天天氣 d c,多雲 待匹配字串 d 表示至少乙個數字 re.findall 記錄常用的 筆記 待匹配字串 表示...

re 正則表達筆記

span 跨度 pattern 模式 todo re.match todo 返回開頭匹配的結果,若開頭無匹配項,則返回none print re.match www www.runoob.com print re.match www www.runoob.com span 0,3 print re....

python正則re使用

1 import re 將正規表示式編譯成pattern物件 pattern re.compile r hello re.i 使用pattern匹配文字,獲得匹配結果,無法匹配時將返回none match pattern.match hello world if match 使用match獲得分組資...