正則表達式html
是什麼? 經過一個規則,來從一段字符串中找到符合規則的內容/判斷某段字符串是否符合規則正則表達式
有什麼用?瀏覽器
註冊頁/網頁上 要求你輸入一個信息 判斷你輸入的信息是否格式正優化
爬取數據 從網頁上把代碼以字符串的形式下載回到內存,提取這個大字符串中我想要的內容了spa
正規規則code
1.字符組 約束字符中某一個字符位置上的值是什麼,只要是出如今字符組中的內容都算匹配到了htm
2.'[3-9]' 從小到達的順序究竟是根據 asc碼的順序來的對象
3.匹配數字 [0-9] 匹配字母[A-Za-z] 匹配數字和字母[0-9a-zA-Z]blog
元字符:索引
元字符 | 匹配內容 |
. | 匹配除換行符意外的任意字符 |
\w | 匹配字母或數字或下劃線 |
\s | 匹配任意的空白符 |
\d | 匹配數字 |
\n | 匹配一個換行符 |
\t | 匹配一個製表符 |
\b | 匹配一個單詞的結尾 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結尾 |
\W | 匹配非字母或數字或下劃線 |
\D | 匹配非數字 |
\S | 匹配非空白符 |
a|b | 匹配字符a或字符b |
() | 匹配括號內的表達式,也表示一個組 |
[...] | 匹配字符組中的字符 |
[^...] | 匹配除了字符組中字符的全部字符 |
量詞 :
量詞 | 用法說明 |
* | 重複零次或者更屢次 |
+ | 重複一次或更屢次 |
? | 重複零次或一次 |
{n} | 重複n次 |
{n,} | 重複n次或更屢次 |
{n,m} | 重複n到m次 |
findall 和 分組的問題 import re # ret = re.findall('\d+(?:\.\d+)?','1.2345+4.3') # ?:寫在一個分組的最開始,表示在findall方法中取消這個分組的優先級 # 1.2345 4.3 # .2345 .3 # print(ret) # ret= re.search('\d+(\.\d+)?','1.2345+4.3') # print(ret.group()) # ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com') # print(ret) # search # ret = re.match('\d+', 'hello,alex3714') # print(ret) # 'aa|bb'.split('|') # split中若是帶有分組,會在分割的同時保留被分割內容中帶分組的部分 # ret = re.split('(\d\d)','alex83wusir38egon20') # print(ret) # ret = re.sub('\d+','sb','alex83wusir38egon20',2) # print(ret) # ret = re.subn('\d+','sb','alex83wusir38egon20') # print(ret) # 節省時間 # obj = re.compile('\d{3}') #將正則表達式編譯成爲一個 正則表達式對象,規則要匹配的是3個數字 # print(obj) # ret = obj.search('abc123eeee') #正則表達式對象調用search,參數爲待匹配的字符串 # print(ret.group()) # ret = obj.search('abc444eeee') #正則表達式對象調用search,參數爲待匹配的字符串 # print(ret.group()) # finditer # 迭代功能的 # findall # 節省空間的 # ret = re.finditer('\d+','12aas14jsk38947cjhxj83') # print(ret) # for i in ret: # print(i.group()) # 基礎查找 findall(分組優先顯示) search match # 替換分割 split(分組保留) sub subn # 代碼優化 compile finditer # 分組命名 # html標籤語言 # html是一種代碼 # 對於瀏覽器來講 瀏覽器和代碼之間有一種約定 # 寫在一個標識符以內的代碼 能夠有一種獨立的格式 # 標識符 # <h1>sgjkagjgdjkf</h1> # 給分組起名字 (?P<tag>正則表達式),使用分組的名字(?P=tag) # ret = re.search('<(?P<tag>\w+?)>\w+</(?P=tag)>',"<b>hello</b>") # print(ret.group()) # print(ret.group('tag')) # 根據分組的索引使用分組 \1,1是分組的索引值 # ret = re.search(r'<(\w+?)>\w+</\1>',"<b>hello</b>") # print(ret.group()) # print(ret.group(1)) # ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>") # ret.group(1) # ret = re.finditer(r'<(\w+?)>\w+</\1>',"<b>hesakdfkhfkllo</b>") # for i in ret: # print(i.group(1)) # print(i.group())