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