1. 程式人生 > >python網路基礎之正則表示式

python網路基礎之正則表示式

下面是我對正則表示式的一些簡單介紹,它多用於爬蟲,用來定製規則

# 正則表示式匯入模組
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