Day 18 正規表示式

2022-02-08 12:42:39 字數 3427 閱讀 4427

一、字元

.匹配除換行符以外的任意字元. 

\w 匹配字母數字或者下劃線.

\s 匹配任意的空白符

\d 匹配數字 

\n 匹配乙個換行符

\t 匹配乙個製表符

^ 匹配字串的開始.

$ 匹配字串的結尾.

\w 匹配非字母或者數字下劃線 

\d 匹配非數字 

\s 匹配非空白符

a|b 

()  匹配空號內的表示式 ,也表示乙個組 

[...]匹配字元組中的字元.

[^....] 匹配除了字元組中字元的所有字元.

量詞 :

二、量詞

* 重複零次或者更多次

+重複一次或者更多次

?重複零次或者一次

重複n次

重複n次或者更多次 

重複n到m次

#* + ? 例項:

import re

obj1=re.findall('李.?','李傑和李蓮英和李二棍子')

print(obj1) #['李傑', '李蓮', '李二'],?表示匹配0或者1次,即匹配李後面任意字元1次

obj2=re.findall('李.*','李傑和李蓮英和李二棍子')

print(obj2) #['李傑和李蓮英和李二棍子'],*表示匹配0次或者多次,即匹配李後面任意字元多次

obj3=re.findall('李.+','李傑和李蓮英和李二棍子')

print(obj3) #['李傑和李蓮英和李二棍子'],+表示匹配1次或者多次,即匹配李後面任意字元多次

obj3=re.findall('李.','李傑和李蓮英和李二棍子')

print(obj3) #['李傑和', '李蓮英', '李二棍'],表示匹配1到2次,即匹配李後面任意字元2次

非貪婪模式

用法說明

*?

重複0次或更多次,但盡可能少重複

+?

重複1次或更多次,但盡可能少重複

??

重複0次或1次,但盡可能少重複

?

重複n次以上,但盡可能少重複

?

重複n到m次,但盡可能少重複

import re

obj1=re.findall('李.??','李傑和李蓮英和李二棍子')

print(obj1) #輸出結果:['李', '李', '李']

obj2=re.findall('李.*?','李傑和李蓮英和李二棍子')

print(obj2) #輸出結果:['李', '李', '李']

obj3=re.findall('李.+?','李傑和李蓮英和李二棍子')

print(obj3) #輸出結果:['李傑', '李蓮', '李二']

obj3=re.findall('李.?','李傑和李蓮英和李二棍子')

print(obj3) #輸出結果:['李傑', '李蓮', '李二']

import re

obj1=re.findall('李.??','李傑和李蓮英和李二棍子')

print(obj1) #輸出結果:['李', '李', '李']

obj2=re.findall('李.*?','李傑和李蓮英和李二棍子')

print(obj2) #輸出結果:['李', '李', '李']

obj3=re.findall('李.+?','李傑和李蓮英和李二棍子')

print(obj3) #輸出結果:['李傑', '李蓮', '李二']

obj3=re.findall('李.?','李傑和李蓮英和李二棍子')

print(obj3) #輸出結果:['李傑', '李蓮', '李二']

4、字符集和[^]

import re

obj1=re.findall('李.[傑蓮英二棍子]*','李傑和李蓮英和李二棍子')

print(obj1) #輸出結果:['李傑', '李蓮英', '李二棍子']

obj2=re.findall('李.[^和]*','李傑和李蓮英和李二棍子')

print(obj2) #輸出結果:['李傑', '李蓮英', '李二棍子'],表示匹配李後面不是和的任意字元

obj3=re.findall('[\d]','456bdha3')

print(obj3) #輸出結果:['4', '5', '6', '3'],表示匹配任意乙個數字

obj3=re.findall('[\d]+','456bdha3')

print(obj3) #輸出結果:['456', '3'],表示匹配任意個數字

5、分組()與或|

身份證號碼是由15位或者18位的字元組成,如果是15位,首位不能是0,其他位數均為數字,如果是18位,則最後一位可能是數字或者x,用正規表示式匹配的兩種方式如下:

正規表示式

結果說明

^[1-9]\d(\d[0-9x])?$

()表示分組,將\d[0-9x]分成一組,就可以整體約束他們出現的次數為0-1次

^([1-9]\d[0-9x]|[1-9]\d)$

表示先匹配[1-9]\d[0-9x]如果沒有匹配上就匹配[1-9]\d

day18 正規表示式初學

正則規則 客觀存在的,世界上任何一種語言都能使用它。注意 正規表示式本身也和python沒有必然聯絡,它就是匹配字串內容的一種規則 在同乙個位置可能出現的各種字元組成了乙個字元組,在正規表示式中用 表示,括號內的內容如有排序,必須按ascii碼的公升序排列。正規表示式,預設匹配原則是貪婪匹配,即往多...

18 正規表示式

1 findall 返回所有滿足匹配條件的結果,放到列表裡,也就是說生成的是乙個列表。findall的優先順序 findall會優先把匹配結果組裡內容返回,如果想要匹配結果,取消許可權即可 取消優先順序 2 search 在整個字串內匹配,返回第乙個滿足匹配條件的結果,用group顯示,沒匹配到呼叫...

day18 re模組(正規表示式)

正規表示式是用來幹嘛的?匹配 字串的!python裡面字串裡提供的方法是完全匹配,但是很多情況下其實是要模糊匹配,但這個時候字串的處理方法就完成不了了,匹配 匹配手機號,前後都是固定格式,中間不確定 這個時候就需要我們的正規表示式來匹配字串!就其本質而言,正規表示式 或 re 是一種小型的 高度專業...