中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
大話 Python:python 基礎(chǔ)鞏固 -- 靈活運(yùn)用正則表達(dá)式完成數(shù)據(jù)提取與篩選

在一般的后端語(yǔ)言中都有正則表達(dá)式的使用,個(gè)人覺(jué)得正則表達(dá)式的難點(diǎn)就是有比較多的元字符比較難記,所以建議大家收藏。而在 python 的編程中,特別是爬蟲之后的數(shù)據(jù)篩選、清洗等操作都需要對(duì)字符串進(jìn)行大量的操作,使用正則表達(dá)式無(wú)疑是最簡(jiǎn)便的一種字符串處理操作。

1、正則表達(dá)式的元字符及組裝形式

首先,正則表達(dá)式就是由一個(gè)一個(gè)的元字符組合起來(lái)的一個(gè)字符串,然后以這個(gè)字符串作為格式去匹配任意的字符串最后生成新的數(shù)據(jù)文本。那么,先來(lái)看一下在 python 中像這樣的元字符到底有哪些。

 1.                    匹配任意字符(不包括換行符)
2^                    匹配開(kāi)始位置,多行模式下匹配每一行的開(kāi)始
3$                    匹配結(jié)束位置,多行模式下匹配每一行的結(jié)束
4*                    匹配前一個(gè)元字符0到多次
5+                    匹配前一個(gè)元字符1到多次
6?                    匹配前一個(gè)元字符0到1次
7{m,n}                匹配前一個(gè)元字符m到n次
8\\                   轉(zhuǎn)義字符,跟在其后的字符將失去作為特殊元字符的含義,例如\\.只能匹配.,不能再匹配任意字符
9[]                   字符集,一個(gè)字符的集合,可匹配其中任意一個(gè)字符
10|                    邏輯表達(dá)式 或 ,比如 a|b 代表可匹配 a 或者 b
11(...)                分組,默認(rèn)為捕獲,即被分組的內(nèi)容可以被單獨(dú)取出,默認(rèn)每個(gè)分組有個(gè)索引,從 1 開(kāi)始,按照"("的順序決定索引值
12(?iLmsux)            分組中可以設(shè)置模式,iLmsux之中的每個(gè)字符代表一個(gè)模式,用法參見(jiàn) 模式 I
13(?:...)              分組的不捕獲模式,計(jì)算索引時(shí)會(huì)跳過(guò)這個(gè)分組
14(?P<name>...)        分組的命名模式,取此分組中的內(nèi)容時(shí)可以使用索引也可以使用name
15(?P=name)            分組的引用模式,可在同一個(gè)正則表達(dá)式用引用前面命名過(guò)的正則
16(?#...)              注釋,不影響正則表達(dá)式其它部分,用法參見(jiàn) 模式 I
17(?=...)              順序肯定環(huán)視,表示所在位置右側(cè)能夠匹配括號(hào)內(nèi)正則
18(?!...)              順序否定環(huán)視,表示所在位置右側(cè)不能匹配括號(hào)內(nèi)正則
19(?<=...)             逆序肯定環(huán)視,表示所在位置左側(cè)能夠匹配括號(hào)內(nèi)正則
20(?<!...)             逆序否定環(huán)視,表示所在位置左側(cè)不能匹配括號(hào)內(nèi)正則
21(?(id/name)yes|no)   若前面指定id或name的分區(qū)匹配成功則執(zhí)行yes處的正則,否則執(zhí)行no處的正則
22\number              匹配和前面索引為number的分組捕獲到的內(nèi)容一樣的字符串
23\A                   匹配字符串開(kāi)始位置,忽略多行模式
24\Z                   匹配字符串結(jié)束位置,忽略多行模式
25\b                   匹配位于單詞開(kāi)始或結(jié)束位置的空字符串
26\B                   匹配不位于單詞開(kāi)始或結(jié)束位置的空字符串
27\d                   匹配一個(gè)數(shù)字, 相當(dāng)于 [0-9]
28\D                   匹配非數(shù)字,相當(dāng)于 [^0-9]
29\s                   匹配任意空白字符, 相當(dāng)于 [ \t\n\r\f\v]
30\S                   匹配非空白字符,相當(dāng)于 [^ \t\n\r\f\v]
31\w                   匹配數(shù)字、字母、下劃線中任意一個(gè)字符, 相當(dāng)于 [a-zA-Z0-9_]
32\W                   匹配非數(shù)字、字母、下劃線中的任意字符,相當(dāng)于 [^a-zA-Z0-9_]

來(lái)源說(shuō)明:以上元字符表說(shuō)明引用自“博客園,菜鳥(niǎo)的日?!?/p>

2、python 的內(nèi)置模塊 re 操作正則表達(dá)式的模式

python 的 re 模塊提供了很多內(nèi)置的函數(shù)來(lái)操作正則表達(dá)式,掌握正則表達(dá)式以及這些函數(shù)的使用會(huì)更大的提高工作效率,因?yàn)榇蠖鄷r(shí)候都是在和字符串打交道。并且 re 模塊在使用這些函數(shù)來(lái)操作正則表達(dá)式的時(shí)候都可以指定不同類型的模式。比如:re 內(nèi)置模塊的 compile(pattern, flags=0) 函數(shù)中的 flags 參數(shù)就是用于指定匹配模式的,默認(rèn)情況下各個(gè)內(nèi)置函數(shù)的模式都等于零就是不指定模式。

1re.I    使匹配對(duì)大小寫不敏感
2re.L    做本地化識(shí)別(locale-aware)匹配
3re.M    多行匹配,影響 ^ 和 $
4re.S    使 . 匹配包括換行在內(nèi)的所有字符
5re.U    根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B.
6re.X    該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫得更易于理解。

3、re 模塊函數(shù)匹配正則表達(dá)式操作字符串

compile(pattern, flags=0) 對(duì)匹配的正則表達(dá)式進(jìn)行預(yù)編譯,這種模式有利于后續(xù)對(duì)同一種匹配規(guī)則的復(fù)用,當(dāng)然也可以不進(jìn)行預(yù)編譯使用 re 模塊的內(nèi)置函數(shù)直接進(jìn)行正則表達(dá)式的使用。

findall(pattern, string, flags=0) 找到所有的匹配以后的數(shù)據(jù),并且使用列表的形式返回匹配后的數(shù)據(jù)。

 1# 導(dǎo)入 re 內(nèi)置模塊
2import re
3# 定義多行字符串 sc
4sc = '''str1
5str2
6str3'''

7
8# 使用 compile() 函數(shù)進(jìn)行正則表達(dá)式對(duì)預(yù)編譯
9# 其中正則表達(dá)式為<.+>參照元字符表,表達(dá)式中<.>表示匹配任意字符(不包括換行符)
10# <+> 表示匹配前一個(gè)元字符1到多次,組合<.+>就表示匹配所有字符不包括換行符
11pattern = re.compile(".+")
12# 正則表達(dá)對(duì)象調(diào)用 findall() 函數(shù)返回列表
13print pattern.findall(sc)
14# 打印返回列表,結(jié)果應(yīng)該是下面列表
15['str1''str2''str3']

split(pattern, string, maxsplit=0, flags=0) 按照正則表達(dá)式匹配的數(shù)據(jù)為切割點(diǎn),對(duì)原來(lái)的數(shù)據(jù)進(jìn)行切分并返回一個(gè)數(shù)據(jù)列表。

1# 定義原始字符串
2sc = '''strw 1 laow
3    strd 2 laow
4    strc 3 laow'''

5# 按照數(shù)字切分
6print re.split('\d+', sc)
7# 打印結(jié)果
8['strw '' laow\n    strd '' laow\n    strc '' laow']

sub(pattern, repl, string, count=0, flags=0) 匹配正則表達(dá)式的字符串并且替換成指定的字符串后返回。

1# 導(dǎo)入內(nèi)置模塊 re
2import re
3# 定義原始字符串
4sc = "the sum of 6 and 9 is [6+9]."
5# 將[6+9]替換為15
6print re.sub('\[6\+9\]''15', sc)
7# 打印結(jié)果
8the sum of 7 and 9 is 15.
search(pattern, string, flags=0) 查找正則表達(dá)式內(nèi)容。

 1# 導(dǎo)入內(nèi)置模塊 re
2import re
3# 定義原始數(shù)據(jù)
4sc = '''strw 1 laow
5    strd 2 laow
6    strc 3 laow'''

7# 找到第一個(gè)以 t 開(kāi)頭的字符串
8sc_res = re.search('t\w+', sc)
9# 必須使用返回對(duì)象的 group() 函數(shù)才能打印出值,因?yàn)?nbsp;search() 函數(shù)返回的是對(duì)象
10print sc_res.group()

escape(pattern) 字符串的轉(zhuǎn)義函數(shù),當(dāng)需要處理的字符串中包含正則表達(dá)式中的元字符時(shí)必須對(duì)原正則表達(dá)式進(jìn)行轉(zhuǎn)義,否則會(huì)導(dǎo)致匹配不正確。

 1# 導(dǎo)入內(nèi)置模塊 re
2import re
3# 定義原始字符串
4sc = ".+\d222"
5# 將正則表達(dá)式<.+\d222>進(jìn)行轉(zhuǎn)義
6pattern_str = re.escape(".+\d222")
7# 打印轉(zhuǎn)移后的正則表達(dá)式
8print pattern_str
9# 打印結(jié)果
10\.\+\\d222
11# 打印匹配后的字符串
12print re.findall(pattern_str, sc)
13# 打印結(jié)果
14['.+\\d222']
4、總結(jié)

除了上述第三點(diǎn)中列舉的常見(jiàn)內(nèi)置函數(shù)的使用,還有關(guān)于 python 內(nèi)置的正則表達(dá)式的用法還有分組、環(huán)視等使用方法。能夠幫助我們處理字符串的大多數(shù)問(wèn)題,正則表達(dá)式在 python 中的使用非常強(qiáng)大、也是后端語(yǔ)言中使用比較高的,建議大家收藏。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python正則表達(dá)式操作指南
Python 正則表達(dá)式(re模塊)操作指南
UC頭條:Python正則表達(dá)式保姆式教學(xué),帶你精通大名鼎鼎的正則!
Python正則表達(dá)式由淺入深(一)
Python學(xué)習(xí)
Python3 如何優(yōu)雅地使用正則表達(dá)式(詳解一)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服