「正規表示式,又稱規則表示式。(英語:regular expression,在**中常簡寫為regex、regexp或re),電腦科學的乙個概念。正規表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。
許多程式語言都支援利用正規表示式進行字串操作。例如,在perl中就內建了乙個功能強大的正規表示式引擎。正規表示式這個概念最初是由unix中的工具軟體(例如sed和grep)普及開的。正規表示式通常縮寫成「regex」,單數有regexp、regex,複數有regexps、regexes、regexen。」
如下分享兩個正規表示式相關有用的**:
a. 常用的元字元
**
說明
.匹配除換行符以外的任意字元
\w匹配字母或數字或下劃線
\s匹配任意的空白符
\d匹配數字
\b匹配單詞的開始或結束
^匹配字串的開始
$匹配字串的結束
**/語法
說明
\w匹配任意不是字母,數字,下劃線,漢字的字元
\s匹配任意不是空白符的字元
\d匹配任意非數字的字元
\b匹配不是單詞開頭或結束的位置
[^x]
匹配除了x以外的任意字元
[^aeiou]
匹配除了aeiou這幾個字母以外的任意字元
**/語法
說明
*重複零次或更多次
+重複一次或更多次
?重複零次或一次
重複n次
重複n次或更多次
重複n到m次
b. 原子 (非列印字元/通用字元)
「原子是正規表示式的最基本的組成單位,而且在每個模式中最少包含乙個原子。原子是由所有那些未顯示指定為元字元的列印和非列印字元組成,所以在這裡將其詳細劃分為五類進行介紹。」
①普通字元作為原子
普通字元是編寫正規表示式時最常見的原子了,包括所有的大寫和小寫字母字元、所有數字等。例如,a——z、a——z、0——9。
②一些特殊字元和元字元作為原子
任何乙個符號都可以作為原子使用,但如果這個符號在正規表示式中有一些特殊意義,我們就必須使用轉義字元「\」取消它的特殊意義,將其變成乙個普通的原子。例如,所有標點符號以及一些其他符號,雙引號「」」、單引號「』」、「*」、「+」、「.」等,如果當原子就必須像\」、\』、\+和\.這樣使用。
③一些非列印字元作為原子
所謂的非列印字元,是一些在字串中的格式控制符號,例如空格、回車及製表符號等。例如下表所示列出了正規表示式中常用的非列印字元及其含義。
元字元(常用的元字元)
④使用「通用字元型別」作為原子
前面介紹的不管是列印字元還是非列印字元作為原子,都是乙個原子只能匹配乙個字元。而有時我們需要乙個原子可以匹配一類字元,例如,匹配所有數字不是乙個數字,匹配所有字母而不是乙個字母,這時就要使用「通用字元型別」了。例如下表所示列出了正規表示式中常用「通用字元型別」及其含義。
⑤自定義原子表()作為原子
c.模式修正符(常用的模式修正符)
「模式修正符就是幾個字母,我們在每個正規表示式中可以一次使用乙個,也可以連續使用多個,每乙個具一定的意義。對整個正規表示式調優使用,也可以說是對正規表示式功能的擴充套件。」常用模式修正符有:
i - 正則內容在匹配時候不區分大小寫(預設是區分的)
m - 在匹配首內容或者尾內容時候採用多行識別匹配
s - 將轉義回車/n取消是為單行匹配如.
x - 忽略正則中的空白
a - 強制從頭開始匹配
d - 強制$匹配尾部無任何內容包括/n
u - 禁止貪婪匹配 只跟蹤到最近的乙個匹配符並結束,常用在採集程式上的正規表示式
d.貪婪模式與懶惰模式
正規表示式,表示重複字元,操作符,預設都是貪婪模式,'?,+,*,{}' 預設都會選擇貪婪模式,會最大長度匹配字串(量詞預設首先最大匹配字串,這些量詞有:+,*,?, 。一開始匹配,就直接匹配到最長字串)。要切換到懶惰模式(懶惰模式),就只是在該元字元,後面加多乙個」?」 即可切換到非貪婪模式(盡可能少地匹配所搜尋的字串)。
e.python中常用的函式
python爬蟲 正規表示式
正規表示式是十分高效而優美的匹配字串工具,一定要好好掌握。利用正規表示式可以輕易地從返回的頁面中提取出我們想要的內容。1 貪婪模式與非貪婪模式 python預設是貪婪模式。貪婪模式,總是嘗試匹配盡可能多的字元 非貪婪模式,總是嘗試盡可能少的字元。一般採用非貪婪模式來提取。2 反斜槓問題 正規表示式裡...
Python爬蟲 正規表示式
一般的正規表示式都可直接到正則生成工具處生成,常見匹配字元 re.match及其常規匹配 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match pattern,string,flags 0 返回的為乙個物件,其中span代表長...
Python 爬蟲 正規表示式
常見的正則字元和含義如下 匹配任意字元,除了換行符 匹配字串開頭 匹配字串末尾 匹配括號內表示式,也表示乙個組 s 匹配空白字元 s 匹配任何非空白字元 d 匹配數字,等價於 0 9 d 匹配任何非數字,等價於 0 9 w 匹配字母數字,等價於 a za z0 9 w 匹配非字母數字,等價於 a z...