Python-正則表達式(讀書筆記)

前言:《Python核心編程》讀書筆記,我可太愛這本書了,這篇讀書筆記裏面只記錄了一些較爲常用的板塊,方便我以後複習查看!!!

什麼是正則表達式

我看來最大的作用就是,爬蟲或者過濾非法字符
正則表達式爲高級的文本模式匹配、抽取、與/或文本形式的搜索和替換功能提供了基礎。
簡單地說,正則表達式(簡稱爲 regex)是一些由字符和特殊符號組成的字符串,它們描述了
模式的重複或者表述多個字符,於是正則表達式能按照某種模式匹配一系列有相似特徵的字
符串。換句話說,它們能夠匹配多個字符串……一種只能匹配一個字符串的正則
表達式模式是很乏味並且毫無作用的,不是嗎?
Python 通過標準庫中的 re 模塊來支持正則表達式。本節將做一個簡短扼要的介紹。

元字符

表示法 描述 實例
literal 匹配文本字符串的字面值 literal foo
re1|re2 匹配正則表達式 re1 或者 re2 foo/bar
. 匹配任何字符(除了\n 之外) b.b
^ 匹配字符串起始部分 ^Dear
$ 匹配字符串終止部分 /bin/*sh$
* 匹配 0 次或者多次前面出現的正則表達式 [A-Za-z0-9]*
+ 匹配 1 次或者多次前面出現的正則表達式 [a-z]+.com
? 匹配 0 次或者 1 次前面出現的正則表達式 goo?
{N} 匹配 N 次前面出現的正則表達式 [0-9]{3}
{M,N} 匹配 M~N 次前面出現的正則表達式 [0-9]{5,9}
[…] 匹配來自字符集的任意單一字符 [aeiou]
[…x−y…] 匹配 x~y 範圍中的任意單一字符 [0-9], [A-Za-z]
[^…] 不匹配此字符集中出現的任何一個字符,包括某一範圍的字符(如果在此字符集中出現) [^aeiou], [^A-Za-z0-9]
(*|+|?|{})? 用於匹配上面頻繁出現/重複出現符號的非貪婪版本(*、+、?、{}) .*?[a-z]
(…) 匹配封閉的正則表達式,然後另存爲子組 ([0-9]{3})?,f(oo

特殊字符

在這裏插入圖片描述

使用圓括號指定分組(重點)

當使用正則表達式時,一對圓括號可以實現以下任意一個(或者兩個)功能:
• 對正則表達式進行分組;
• 匹配子組。

爲什麼匹配子組這麼重要呢?主要原因是在很多時候除了進行匹配操作以外,我們還想要提取所匹配的模式。例如,如果決定匹配模式\w±\d+,但是想要分別保存第一部分的字母,和第二部分的數字,如果爲兩個子模式都加上圓括號,例如(\w+)-(\d+),然後就能夠分別訪問每一個匹配
子組。

擴展表示法

在這裏插入圖片描述

看起來暫時不太清楚的語句截圖方便複習

在這裏插入圖片描述

懂了匹配字符在這裏插入圖片描述

Python的re

在這裏插入圖片描述

使用 match()方法匹配字符串

match()
函數試圖從字符串的起始部分對模式進行匹配。如果匹配成功,就返回一個匹配對象;如果匹配失敗,就返回 None,匹配對象的 group()方法能夠用於顯示那個成功的匹配

import re

a = re.match("aa\w*","aaaccc")
print(a.group())

使用 search()在一個字符串中查找模式(搜索與匹配的對比)

其實,想要搜索的模式出現在一個字符串中間部分的概率,遠大於出現在字符串起始部分的概率。這也就是 search()派上用場的時候了。search()的工作方式與 match()完全一致,不同之處在於 search()會用它的字符串參數,在任意位置對給定正則表達式模式搜索第一次出現的匹配情況。如果搜索到成功的匹配,就會返回一個匹配對象;否則,返回 None。

import re

a = re.search("aa\w*","aaaccc")
print(a)
print(a.group())

group()與groups()

group()要麼返回整個匹配對象,要麼根據要求返回特定子組。groups()則僅返回一個包含唯一或者全部子組的元組。如果沒有子組的要求,那麼當group()仍然返回整個匹配時,groups()返回一個空元組。
在這裏插入圖片描述
在這裏插入圖片描述

匹配字符串的起始和結尾以及單詞邊界

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章