正規表示式

2021-09-28 22:58:57 字數 3732 閱讀 8610

ere

pcre **

說明舉例

.匹配除換行符外任意乙個字元

.[abc]

字元集合,只能表示乙個字元位置。 匹配所包含的任意乙個字元

[abc]匹配plain中的』a』

[^abc]

字元集合,只能表示乙個字元位置 匹配除去集合內字元的任意乙個字元

[^abc]可以匹配plain中的』p』,『l』,『i』或者』n』

[a-z]

字元範圍,也是個集合,表示乙個字元位置 匹配所包含的任意乙個字元

常用[a-z],[0-9]

[^a-z]

字元範圍,也是個集合,表示乙個字元位置 匹配出去集合內字元的任意乙個字元

\b匹配單詞的邊界

\bb在文字中找到單詞中b開頭的b字元

\b不匹配單詞的邊界

t\b包含t的單詞但是不以t結尾的t字元,例如write \bb不以b開頭的含有b的單詞,例如able

\d[0-9]匹配1位數字

\d\d

[^0-9]匹配一位非數字

\s匹配1位空白字元,包括換行符、製表符、空格 [\f\r\n\t\v]

\s匹配1位非空白字元

\w匹配[a-za-z0-9_],包括中文的字

\w\w

匹配\w之外的字元

轉義

凡是在正規表示式中有特殊意義的符號,如果想使用它的本意,請使用\轉義。

反斜槓自身,得使用\\

\r、\n還是轉義後代表回車、換行

重複**

說明舉例

*表示前面的正規表示式會重複0次或多次

e\w*單詞中e後面可以有非空白字元

+表示前面的正規表示式重複至少1次

e\w+單詞中e後面至少有乙個非空白字元

?表示前面的正規表示式會重複0次或1次

e\w?單詞中e後面至多有乙個非空白字元

重複固定的n次

e\w單詞中e後面只能由乙個非空白字元

重複至少n次

e\w等價e\w+

w\w等價e\w*

e\w等價e\w?

重複n到m次

e\w單詞中e後面至少1個,至多10個非空白字元

練習:1、匹配手機號碼

字串為』手機號碼13246546466『

2、匹配中國座機

字串為』號碼025-23214235、0543-423543536。『

1、\d

2、\d-\d或**

說明舉例

x|y匹配x或者y

wood took foot food

使用w | food 或者(w|f)food

捕獲**

說明舉例

(pattern)

使用小括號指定乙個子表示式,也叫分組

捕獲後會自動分配組號從1開始

可以改變優先順序

\數字匹配對應的分組

(very)\1匹配very very,但捕獲的組group是very

(?:pattern)

如果僅僅為了改變優先順序,就不需要捕獲分組

(?:w|f)ood

'industr(?:y|ies)『等價』industry|industries』

(?exp

(?'name』exp))

命名分組捕獲,但是可以通過name訪問分組

python語法必須是(?exp)

測試字串為wood took foot food

**說明

舉例(?=exp)

零寬斷言正**先行斷言

斷言exp一定在匹配的右邊出現,

也就是說斷言後面一定跟個exp

f(?=oo)f後面一定有oo出現

(?<=exp)

零寬斷言正回顧後發斷言

斷言exp一定出現在匹配的左邊出現,

也就是說前面一定有個exp字首

(?<=f)ood、

(?<=t)ook分別匹配

ood、ook, ook前一定有t出現

負向零寬斷言**

說明舉例

(?!exp)

零寬度負**先行斷言

斷言exp一定不會出現在右側,

也就是說斷言後面一定不是exp

\d(?!\d)匹配3位數字,

斷言3位數字後面

一定不能是數字

foo(?!d)foo後面

一定不是d

(?零寬度負回顧後發斷言

斷言exp

一定不能出現在左側,

也就是說

斷言前面

一定不能是exp(?

**說明

舉例(?#comment)

注釋f(?=oo)(?#這個後斷言不捕獲)

注意:斷言會不會捕獲呢?也就是斷言佔不佔分組號?

斷言不佔分組號。斷言如同條件,只是要求匹配必須滿足斷言的條件。

分組和捕獲是同乙個意思

使用正規表示式時,能用簡單表示式,就不用複雜的表示式。

預設是貪婪模式,也就是說盡量多匹配更長的字串。

非貪婪很簡單,在重複的符號後面加上乙個?,就盡量的少匹配了。

**說明

舉例*?

匹配任意次,但盡可能少重複

+?匹配至少1次,但盡可能少重複

??匹配0次或1次,但盡可能少重複

?匹配至少n次,但盡可能少重複

?匹配至少n次,至多m次,但盡可能少重複

*y和v.

*?y

引擎選項

**說明

舉例ignorecase

匹配時忽略大小寫

re.l

re.ignorecase

singleline

單行模式。可以匹配所有字元,包括\n

re.s

re.ditall

multiline

多行模式^行首、$行尾

re.m

re.multiline

ignorepatternwhitespace

忽略表示式中的空白字元,如果喲啊使用空白字元用轉義,#可以用來做注釋

re.x

re.verbose

單行模式:

.可以匹配所有字元,包括換行符

^表示整個字串的開頭,$整個字串的結尾

多行模式:

.可以匹配除了換行符之外的字元,多行不影響.

^表示行首,$行尾,只不過這裡的行是每一行

預設模式:可以看作待匹配的文字是一行,不能看作多行,.不能匹配換行符,^和$表示行首和行尾,而行首行尾就是整個字串的開頭和結尾

單行模式:基本和預設模式一樣,只是.終於可以匹配任意乙個字元包括換行符,這時所有文字就是乙個長長的只有一行的字串。^就是這一行字串的行首,$就是這一行的行尾。

多行模式:

重新定義了行的概念,但不影響.的行為,^和還是行首行尾的意思,只不過因為多行模式可以識別換行符了。'開始'指的是\n後緊接著下乙個字元;'結束'指的是\n前的字元,注意最後一行結尾可以沒有\n。

簡單講,單行模式只影響.行為,多行模式重新定義行影響了^和$。

注意:注意字串中看不見的換行符,\r\n會影響e$的測試,e$只能匹配e\n

舉例

harry key

.$指的是此行的結尾,而預設模式和單行模式都是一行,指的是這個大字串的最後乙個字元,就是key的y。

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...