一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python全棧之路正則函數(shù)

Python全棧之路正則函數(shù)

2022-03-10 00:27熬夜泡枸杞 Python

這篇文章主要為大家介紹了Python正則函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产理论片在线观看 | 激情五月开心 | 精品久久久久久久久免费影院 | 国产欧美二区三区 | 蜜月aⅴ免费一区二区三区 蜜桃影像传媒推广 | 日韩 视频在线播放 | 国产精品永久免费视频观看 | 波多野结衣中文字幕乱七八糟 | 51国产| 国产欧美日韩在线观看精品 | 貂蝉沦为姓奴小说 | 日本综合在线观看 | 日本玖玖视频 | 国产区成人精品视频 | 99视频在线观看免费视频 | 色偷偷亚洲男人 | 波多野结衣xxxx性精品 | 91精品久久一区二区三区 | 国产免费久久精品 | 1769最新资源站 | 日本高清免费不卡在线 | 性欧美videosex18嫩 | 2021日产国产麻豆 | 亚洲AV无码国产精品色在线看 | 国产在视频线精品视频 | 2012在线观看免费视频大全 | 成人精品一区二区三区中文字幕 | 色偷偷亚洲综合网亚洲 | 饭冈加奈子在线播放观看 | 九九精品成人免费国产片 | 四虎永久在线精品国产 | 好紧好爽的午夜寂寞视频 | 5151hh四虎国产精品 | 精品免费久久久久久影院 | 免费免费啪视频在线观播放 | 日本伊人色综合网 | 亚洲欧美精品一区天堂久久 | 無码一区中文字幕少妇熟女网站 | 欧美一区二区三区精品 | 关晓彤一级做a爰片性色毛片 | 王雨纯 羞羞 |