久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 Python集中營 2022-10-10 發(fā)布于甘肅

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

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

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

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

來源說明:以上元字符表說明引用自“博客園,菜鳥的日?!?/p>

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

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

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

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

compile(pattern, flags=0) 對匹配的正則表達(dá)式進(jìn)行預(yù)編譯,,這種模式有利于后續(xù)對同一種匹配規(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á)式對預(yù)編譯
9# 其中正則表達(dá)式為<.+>參照元字符表,表達(dá)式中<.>表示匹配任意字符(不包括換行符)
10# <+> 表示匹配前一個元字符1到多次,,組合<.+>就表示匹配所有字符不包括換行符
11pattern = re.compile(".+")
12# 正則表達(dá)對象調(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ù)為切割點,對原來的數(shù)據(jù)進(jìn)行切分并返回一個數(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# 找到第一個以 t 開頭的字符串
8sc_res = re.search('t\w+', sc)
9# 必須使用返回對象的 group() 函數(shù)才能打印出值,因為 search() 函數(shù)返回的是對象
10print sc_res.group()

escape(pattern) 字符串的轉(zhuǎn)義函數(shù),,當(dāng)需要處理的字符串中包含正則表達(dá)式中的元字符時必須對原正則表達(dá)式進(jìn)行轉(zhuǎn)義,,否則會導(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é)

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

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多