python正則 python中正則匹配

2021-10-10 14:51:36 字數 3595 閱讀 4656

寫**時候,不管是爬蟲,還是獲取某些特定的資源,我們需要寫正規表示式。 因為不常用,有些語法生疏。有時明明覺得自己的語法可以,可就是不行。
正規表示式是一種文字模式,包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為「元字元」)。 不管是python還是shell,都可以寫正則。

正規表示式基本語法

頭和尾

他們的作用是分別指出乙個字串的開始和結束。例子如下:

"^the":表示所有以"the"開始的字串("there","the cat"等);

"of despair":表示開始和結尾都是"abc"的字串——呵呵,只有"abc"自己了;

"notice":表示任何包含"notice"的字串。

模糊匹配

'.'表示匹配任意的乙個字元,相當於乙個佔位符號。

'',「沒有或更多」

'+',「一次或更多」

'?',「沒有或一次」

下面是幾個例子:

"ab":表示乙個字串有乙個a後面跟著零個或若干個b。("a", "ab", "abbb",……);

"ab+":表示乙個字串有乙個a後面跟著至少乙個b或者更多;

"ab?":表示乙個字串有乙個a後面跟著零個或者乙個b;

"a?b+$":表示在字串的末尾有零個或乙個a跟著乙個或幾個b。

分組和範圍

() 是為了提取匹配的字串。表示式中有幾個()就有幾個相應的匹配字串。

是定義匹配的字元範圍。比如 [a-za-z0-9] 表示相應位置的字元要匹配英文本元和數字。[s]表示空格或者號。

{}一般用來表示匹配的長度,比如 s 表示匹配三個空格,s表示匹配一到三個空格。

你也可以使用範圍,用大括號括起,用以表示重複次數的範圍。

"ab":表示乙個字串有乙個a跟著2個b("abb");

"ab":表示乙個字串有乙個a跟著至少2個b;

"ab":表示乙個字串有乙個a跟著3到5個b。

區別:圓括號()是組,主要應用在限制多選結構的範圍/分組/捕獲文字/環視/特殊模式處理

(abc|bcd|cde),表示這一段是abc、bcd、cde三者之一均可,順序也必須一致。

方括號是單個匹配,字符集/排除字符集/命名字符集

示例:1、[0-3],表示找到這乙個位置上的字元只能是0到3這四個數字,與(abc|bcd|cde)的作用比較類似,但圓括號可以匹配多個連續的字元,而一對方括號只能匹配單個字元

2、[^0-3],表示找到這乙個位置上的字元只能是除了0到3之外的所有字元

()內的內容表示的是乙個子表示式,()本身不匹配任何東西,也不限制匹配任何東西,只是把括號內的內容作為同乙個表示式來處理

表示匹配的字元在中,並且只能出現一次,並且特殊字元寫在會被當成普通字元來匹配

選擇,'¦',表示「或」操作

"hi¦hello":表示乙個字串裡有"hi"或者"hello";

"(b¦cd)ef":表示"bef"或"cdef";

"(a¦b)*c":表示一串"a""b"混合的字串後面跟乙個"c";

為了逐字表達,你必須在"^.$()¦*+? n 是乙個非負整數,匹配確定的n 次。

n 是乙個非負整數,至少匹配n 次。

m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗號和兩個數之間不能有空格。

? 當該字元緊跟在任何乙個其他限制符 (*, +, ?, , , ) 後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜尋的字串,而預設的貪婪模式則盡可能多的匹配所搜尋的字串。

. 匹配除 「n」 之外的任何單個字元。要匹配包括 'n' 在內的任何字元,請使用象 '[.n]' 的模式。

(pattern) 匹配pattern 並獲取這一匹配。

(?:pattern) 匹配pattern 但不獲取匹配結果,也就是說這是乙個非獲取匹配,不進行儲存供以後使用。

(?=pattern) 正向預查,在任何匹配 pattern 的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。

(?!pattern) 負向預查,與(?=pattern)作用相反

x|y 匹配 x 或 y。

[xyz] 字元集合。

[^xyz] 負值字元集合。

[a-z] 字元範圍,匹配指定範圍內的任意字元。

[^a-z] 負值字元範圍,匹配任何不在指定範圍內的任意字元。

b 匹配乙個單詞邊界,也就是指單詞和空格間的位置。

b 匹配非單詞邊界。

cx 匹配由x指明的控制字元。

d 匹配乙個數字字元。等價於 [0-9]。

d 匹配乙個非數字字元。等價於 [^0-9]。

f 匹配乙個換頁符。等價於 x0c 和 cl。

n 匹配乙個換行符。等價於 x0a 和 cj。

r 匹配乙個回車符。等價於 x0d 和 cm。

s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於[ fnrtv]。

s 匹配任何非空白字元。等價於 [^ fnrtv]。

t 匹配乙個製表符。等價於 x09 和 ci。

v 匹配乙個垂直製表符。等價於 x0b 和 ck。

w 匹配包括下劃線的任何單詞字元。等價於'[a-za-z0-9_]'。

w 匹配任何非單詞字元。等價於 '[^a-za-z0-9_]'。

xn 匹配 n,其中 n 為十六進製制轉義值。十六進製制轉義值必須為確定的兩個數字長。

num 匹配 num,其中num是乙個正整數。對所獲取的匹配的引用。

太多了,大概記住就行了。

貪婪與非貪婪

屬於貪婪模式的量詞,也叫做匹配優先量詞,包括:

「」、「」、「?」、「」和「+」。

在一些使用nfa引擎的語言中,在匹配優先量詞後加上「?」,即變成屬於非貪婪模式的量詞,也叫做忽略優先量詞,包括:

「?」、「?」、「??」、「?」和「+?」。

意思是說,跟人性一樣,本性是貪婪的。但是,經過自己的反問,變得不貪婪了。

以下一些例子,來闡明這個

101000011000

1.* 結果:all, 貪婪的,所有匹配

1.? 結果:10,10,11, 非貪婪(最多乙個,達到為止)

1.+ 結果:all, 貪婪的,所有匹配

1.*? 結果:非1 1 1 1 , 非貪婪的(點後面0個)

1.+? 結果:10,10,11,非貪婪的(點後面乙個)

1.?+ no(不合法)

1.?* no (不合法)

1.*+ no(不合法)

1.+* no (不合法)

如果對自己寫的表示式沒有信心,可以找個工具檢測以下。

網上很多任務具,如:

檢驗:

正規表示式也會有精度的。一般我們要把其特徵點找出來,後面的就好辦了。

python正則 python正則表達

正規表示式是一種用來匹配字串的強有力的 設計思想是用一種描述性的語言來給字串定義乙個規則,凡是符合規則的字串,就認為它 匹配 否則就不匹配。一 可以通過幾類符號設計限定規則,常用的思想如下 匹配除換行符以外的任意字元 w匹配字母 數字 下劃線或漢字 w匹配字母 數字 下劃線或漢字以外的字元 s匹配任...

python正則 空格 python正則

d 匹配乙個數字 w 匹配乙個字母或數字 匹配任意字元 表示任意個字元 包括0個 表示至少乙個字元 表示0個或1個字元 表示行的開頭 表示行的結束 s 匹配乙個空格 也包括tab等空白符 s 表示至少有乙個空格 a b可以匹配a或b,所以 p p ython可以匹配 python 或者 python...

python中oxf python中的正規表示式

一 校驗數字的表示式 1 數字 0 9 2 n位的數字 d 3 至少n位的數字 d 4 m n位的數字 d 5 零和非零開頭的數字 0 1 9 0 9 6 非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 7 帶1 2位小數的正數或負數 d d 8 正數 負數 和小數 d d 9 有兩位小數的...