前言:《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()返回一個空元組。