python笔记之正则表达式
正則表達(dá)式
正則表達(dá)式(regular expression)
什么正則表達(dá)式?
我們希望只提取出我們所關(guān)注的數(shù)據(jù),此時(shí)就可以用正則表達(dá)式
正則表達(dá)式就是一種進(jìn)行數(shù)據(jù)篩選的表達(dá)式
正則表達(dá)式就是用一種特殊規(guī)則的字符串,來表達(dá)對字符串的一種過濾(稱作匹配)
什么是原子?
原子就是正則表達(dá)式的一個(gè)基本組成的單位,每個(gè)正則表達(dá)式至少要包含一個(gè)原子
示例:
運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(11, 16), match='baidu'>運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(3, 4), match='\n'>通用字符作為原子
\w : 匹配單字符,大小寫字母,數(shù)字,下劃線,等價(jià)于[a-zA-Z0-9]
\W : 匹配到任何非單詞字符,等于[^a-zA-z0-9]
\d : 匹配到一個(gè)數(shù)字字符,等價(jià)于[0-9]
\D : 匹配到一個(gè)非數(shù)字字符等價(jià)于[^0-9]
\s : 匹配到任何空白字符,包括空格,制表符,換頁符等等,等價(jià)于[\f\n\t\v]
\S : 匹配到任何非空白字符,等價(jià)于[^\f\n\t\v]
示例:
import re string = "abcd123gdsa" pat = "\w" #匹配單字符,所以會(huì)顯示a result = re.search(pat,string) print(result)運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(0, 1), match='a'>匹配大小寫字母,數(shù)字,下劃線 [a-zA-Z0-9]
匹配數(shù)字 [0-9]
匹配非數(shù)字 [^0-9]
示例:
運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(2, 5), match='123'>在不改變正則表達(dá)式的情況下,通過模式修正符來改變正則表達(dá)式的含義從而實(shí)現(xiàn)匹配結(jié)果的調(diào)整
I 匹配時(shí)忽略大小寫
N 多行匹配
L 本地化識(shí)別匹配
S 讓”.”匹配換行符
示例:
運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(3, 9), match='python'>7.貪婪模式和懶惰模式
貪婪就是盡可能多去匹配
懶惰盡可能少的去匹配
貪婪模式示例:
運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(6, 19), match='pythonsadfapy'>懶惰模式示例:
import re string = "faffafpythonsadfapy" pat = "p.*?y" result = re.search(pat,string) print(result)運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(6, 8), match='py'>正則表達(dá)式函數(shù)
re.search()
掃描整個(gè)字符串并返回第一個(gè)成功的匹配,存在多個(gè)也只會(huì)返回一個(gè)
re.match()
嘗試從字符串的起始位置匹配,如果不是起始位置的話,match()就返回None
import re print(re.match("www","www.baidu.com")) #匹配成功 print(re.match("com","www.baidu.com")) #匹配失敗運(yùn)行結(jié)果:
<_sre.SRE_Match object; span=(0, 3), match='www'> Nonere.search()和re.match()的區(qū)別:
re.match() 只匹配字符串的開始,如果開始就不符合規(guī)則,則匹配失敗,返回None
re.search() 匹配整個(gè)字符串,直到一個(gè)成功的匹配
re.sub()
檢索和替換
語法: re.sub(pattern,repl,string)re.sub(正則表達(dá)式,替換字符,被替換的字符串)-patten 規(guī)則 -repl 替換的字符 -string 原始字符串 -count 模式匹配后替換的最大次數(shù),默認(rèn)0表示替換所有匹配的值示例:
import re phone = "123-343-5553 # 這是個(gè)電話號碼"#刪除注釋 # num = re.sub("#.*$","",phone) num = re.sub("\D","",phone) print(num)運(yùn)行結(jié)果:
1233435553全局匹配函數(shù)
re.compile(Pattern) –
用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式對象供match() , search() 這兩個(gè)函數(shù)來使用
示例,
運(yùn)行結(jié)果:
['123', '456']總結(jié)
以上是生活随笔為你收集整理的python笔记之正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python笔记之文件的基本操作和os模
- 下一篇: websocket python爬虫_p