python網路基礎之正則表示式
阿新 • • 發佈:2018-11-30
下面是我對正則表示式的一些簡單介紹,它多用於爬蟲,用來定製規則
# 正則表示式匯入模組 import re # match只匹配字串的頭 # re.match(正則表示式,需要處理的字串) re.match(r"hello", "hello world") # 大小寫的匹配 re.match(r"[Hh]ello", "Hello world") re.match(r"[Hh]ello", "hello world") # \d 0……9數字(單個字元) \D非數字 # [] 匹配括號中的字元 # \w a-z,A-Z,0-9,_(單個字元) \W非單詞字元 # \s 匹配空白,即空格,tab鍵 \S非空白 # . 匹配任意一個字元(除了\n換行) re.match(r"速度與激情[1-9]", "速度與激情8").group() re.match(r"速度與激情\d", "速度與激情2").group() re.match(r"速度與激情.", "速度與激情d").group() re.match(r"速度與激情\w", "速度與激情_").group() re.match(r"速度與激情\s", "速度與激情 1").group() # {m} 匹配前一個字元出現的次數,m次 # {m,n} 前一個字元出現m到n次 # ? 前一個字元要麼出現一次,要麼不出現 # * 匹配前一個字元出現0次或無限次 # + 前一個字元至少出現1次或無限次 re.match(r"速度與激情\d{2}", "速度與激情15").group() re.match(r"速度與激情\d{1,2}", "速度與激情4").group() re.match(r"速度與激情\d{1,2}", "速度與激情45").group() re.match(r"029-?\d{8}", "029-25252525").group() re.match(r"029-?\d{8}", "02925252525").group() re.match(r"029-+\d{8}", "029-25364563").group() # \n \t \:代表轉義 # ^匹配字串開頭 匹配字串結尾$ # [^ ] 表示非空,遇到空就不匹配 # 匹配分組: # | 匹配左右任意一個表示式 # () 將括號中的內容作為一個分組——————按組號去進行檢視組的內容 re.match(r"([a-zA-Z0-9]{4,8})@(163|129)\.com", "
[email protected]").group(2) # 標籤配對,進行組的匹配 re.match(r"<(\w*)>.*</\1>", "<h1>shhshhs</h1>").group() # (?P<name>) 分組起名字 # (?P=name) 分組用名字 html_str = "<html><h1>www.yltenu.com</h1></html>" re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>",html_str).group() re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>",html_str).group() # search 不用從頭開始匹配 match 從頭開始匹配 re.search(r"\d+", "閱讀次數為:9999").group() # findall 統計全部 返回值就是列表 re.findall(r"\d+", "python:999 ,java:5252 ,php:5252") # sub 將匹配到的資料進行替換(全部替換) 1:正則 2:替換 3:字串 re.sub(r"\d+", "1111", "python = 999") # r 表示原生字串,不必進行多次轉義,造成反斜槓空擾 # split 字串分割 re.split(r":| ", "jjfj:fjfj orpm:fklls") #空格,:進行分割 # 1,從語法角度看貪婪與非貪婪 # 被匹配優先量詞修飾的表示式,使用的是貪婪模式;被忽略優先量詞修飾的表示式,使用的是非貪婪模式 # 匹配優先量詞包括:“{m,n}”、“{m,}”、“?”、“*”和“+” # 預設情況下都是貪婪模式,在量詞後面加上?就是非貪婪模式 # 2,從應用角度看貪婪與非貪婪 # 貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,儘可能多的匹配; # 而非貪婪模式在整個表示式匹配成功的前提下,儘可能少的匹配 # 3,從匹配原理角度看貪婪與非貪婪 # 能達到同樣匹配結果的貪婪與非貪婪模式,通常是貪婪模式的匹配效率較高 # 所有的非貪婪模式,都可以通過修改量詞修飾的表示式,轉換為貪婪模式 # 貪婪模式可以與固化分組結合,提升匹配效率,而非貪婪模式卻不可以 content = "tel is 029-2586-8963" # 貪婪模式 print(re.match(r".+(\d+-\d+-\d+)", content).group(1)) # ----->9-2586-8963 # 非貪婪模式 print(re.match(r".+?(\d+-\d+-\d+)", content).group(1)) # ----->029-2586-8963