1. 反向引用_命名分組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# ### 反向引用 import re strvar = "<div>明天又要休息了</div>" obj = re.search( "<(.*?)>(.*?)<(.*?)>" ,strvar) print (obj) # 獲取匹配到的內(nèi)容 res1 = obj.group() print (res1) # 獲取分組里的內(nèi)容 res2 = obj.groups() print (res2) # 反向引用的語(yǔ)法 \1把第一個(gè)括號(hào)里面匹配到的內(nèi)容在引用一次 obj = re.search(r "<(.*?)>(.*?)</\1>" ,strvar) print (obj) print (obj.group()) print (obj.groups()) strvar = " z3d4pzd a1b2cab " obj = re.search(r "(.*?)\d(.*?)\d(.*?)\1\2" ,strvar) print (obj) print (obj.group()) print (obj.groups()) # ### 命名分組 """ 3) (?P<組名>正則表達(dá)式) 給這個(gè)組起一個(gè)名字 4) (?P=組名) 引用之前組的名字,把該組名匹配到的內(nèi)容放到當(dāng)前位置 """ # 寫(xiě)法一 strvar = " z3d4pzd a1b2cab " obj = re.search(r "(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)\1\2" ,strvar) print (obj) print (obj.group()) # 寫(xiě)法二 strvar = " z3d4pzd a1b2cab " obj = re.search(r "(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)(?P=tag1)(?P=tag2)" ,strvar) print (obj) print (obj.group()) |
2. 正則函數(shù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# ### 正則函數(shù) import re # search 通過(guò)正則匹配出第一個(gè)對(duì)象返回,通過(guò)group取出對(duì)象中的值 strvar = "3+4 6*4" obj = re.search(r "(\d+[+*]\d+)" ,strvar) print (obj) # 獲取匹配到的內(nèi)容 print (obj.group()) # 獲取分組當(dāng)中的內(nèi)容 (返回元組) print (obj.groups()) # match 驗(yàn)證用戶輸入內(nèi)容 (了解) """search在正則表達(dá)式的前面加上^ 等價(jià)于 match ,其他用法上一模一樣""" strvar = "a17366668888" strvar = "17366668888" # obj = re.search(r"^\d+",strvar) # obj = re.match(r"\d+",strvar) # print(obj.group()) print (obj) # split 切割 strvar = "alex|wusir_xboyww@risky" lst = re.split( "[|_@]" ,strvar) print (lst) strvar = "alex2341273894wusir234234xboyww11111risky" lst = re.split( "\d+" ,strvar) print (lst) # sub 替換 strvar = "alex|wusir_xboyww@risky" """ strvar = strvar.replace("|","&") strvar = strvar.replace("_","&") strvar = strvar.replace("@","&") print(strvar) """ # sub(正則,替換的字符,原字符串[,替換的次數(shù)]) res = re.sub( "[|_@]" , "&" ,strvar) res = re.sub( "[|_@]" , "&" ,strvar, 1 ) print (res) # subn 替換 (用法上與sub相同,只是返回值不同) res = re.subn( "[|_@]" , "&" ,strvar) res = re.subn( "[|_@]" , "&" ,strvar, 2 ) print (res) # res = re.sub("[|_@]","&",strvar) # ('alex&wusir&xboyww@risky', 2) # finditer 匹配字符串中相應(yīng)內(nèi)容,返回迭代器 """返回的是迭代器,迭代器中包含了對(duì)象 對(duì)象.group來(lái)獲取匹配到的值""" from collections import Iterator, Iterable strvar = "sdf23647fdgdfg()*()*23423423" it = re.finditer( "\d+" ,strvar) print ( isinstance (it,Iterator)) for obj in it: print (obj.group()) # compile 指定一個(gè)統(tǒng)一的匹配規(guī)則 """ 正常情況下,正則表達(dá)式編譯一次,執(zhí)行一次 為了避免反復(fù)編譯,節(jié)省時(shí)間空間,可以使用compile統(tǒng)一規(guī)則 編譯一次,終身受益 """ strvar = "asdfs234sdf234" pattern = re. compile ( "\d+" ) print ( "<===>" ) obj = pattern.search(strvar) print (obj.group()) lst = pattern.findall(strvar) print (lst) # 修飾符 # re.I 使匹配對(duì)大小寫(xiě)不敏感 strvar = "<h1>大標(biāo)題</H1>" pattern = re. compile ( "<h1>(.*?)</h1>" , flags = re.I) obj = pattern.search(strvar) print (obj.group()) # re.M 使每一行都能夠單獨(dú)匹配(多行匹配),影響 ^ 和 $ """單行獨(dú)立匹配,而不是整體匹配""" strvar = """ <p>111</p> <a>222</a> <strong>333</strong> """ pattern = re. compile ( "^<.*?>(?:.*?)<.*?>$" , flags = re.M) lst = pattern.findall(strvar) print (lst) # re.S 使 . 匹配包括換行在內(nèi)的所有字符 strvar = """ give sdfsdfmefive """ # 多個(gè)修飾符一起使用通過(guò)|拼接 pattern = re. compile ( ".*?mefive" , flags = re.S|re.I|re.M ) obj = pattern.search(strvar) print (obj.group()) |
小提示:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
爬蟲(chóng)爬數(shù)據(jù)的時(shí)候用finditer,數(shù)據(jù)太大,用迭代器存 strvar = """ <p>111</p> <a>222</a> <strong>333</strong> """ pattern = re. compile ( "^<.*?>(?:.*?)<.*?>$" ) lst = pattern.findall(strvar) print (lst) # 這里的結(jié)果為[] 因?yàn)?不匹配換行符,所以不會(huì)返回結(jié)果 pattern = re. compile ( "^<.*?>(?:.*?)<.*?>$" ,flags = re.M) 這里就是 一行的一行的匹配了 不會(huì)用 for i in 找思路 不會(huì)用. * ?找思路 |
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!
原文鏈接:https://blog.csdn.net/weixin_46818279/article/details/121315758