正規表示式筆記

2021-07-23 04:04:07 字數 3028 閱讀 1163

正規表示式用於匹配字串的規則的,知識點不難,但是比較繁瑣,這篇文章把正則的基本常用點系統的整理了一下,方便自己以後要用的時候查閱,也希望給大家提供參考。廢話不多說,直接奔主題

元字元說明

.除了換行符以外的任意字元

*指定*前邊的內容可以連續重複使用任意次數

+匹配重複1次或更多次

^匹配字串的開始

$匹配字串的結束

\d匹配一位數字

\s匹配任意的空白符,如空格、tab、換行符、中文全形空格等

\w匹配字母或數字或下劃線或漢字等

\b匹配單詞的開始或結束

如果想查詢元字元本身的話,就得使用\來取消這些字元的特殊意義。因此你應該使用\.和\* 。當然如果要查詢\本身,也得用\\

例子:

deerchao\.net匹配deerchao.net,c:\\windows匹配c:\windows

**說明

*重複0次或更多次

+重複1次或更多次

?重複0次或1次

重複n次

重複n次或更多次

重複n到m次

要想查詢數字,字母,空白是很簡單的,因為已經有了對應這些字元集合的元字元,但是如果你想匹配沒有預定義元字元的字元集合(比如母音字母a,e,i,o,u),應該怎麼辦?這個時候字元類就起作用了。

例子:**

說明[aeiou]

匹配任何乙個英文母音字母

[.?!]

匹配標點符號(.或?或!)

[0-9]

\d完全一致,匹配0到9中的一位數字

[a-z0-9a-z]

匹配a到z,a到z,中任意乙個字母或0到9任意乙個數字

正規表示式裡的分枝條件指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。(注:匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。)

例子:

0\d-\d|0\d-\d -> 這個表示式能匹配兩種以連字型大小分隔的**號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)

可以用小括號來指定子表示式(也叫做分組),然後你就可以指定這個子表示式的重複次數了

例子:

(\d.)\d -> 可以匹配如123.123.123.123、001.002.003.004等類似於這樣的字串

**說明

\w匹配任意不是字母,數字,下劃線,漢字的字元

\s匹配任意不是空白符的字元

\d匹配任意非數字的字元

\b匹配不是單詞開頭或結束的位置

[^x]

匹配除了x以外的任意字元

[^aeiou]

匹配除了aeiou這幾個字母以外的任意字元

例子:

]+> : 匹配用尖括號括起來的以a開頭的字串。

後向引用用於重複搜尋前面某個分組匹配的文字。

1. 預設情況下,每個分組會自動擁有乙個組號,規則是:從左向右,以分組左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推。

例:\b(\w+)\b\s+\1\b 這裡的\1就相當於(\w+),這個正則可以匹配go go或move move這樣的字串

2. 也可以自己指定表示式的組名。

(?\w+)或者(?'word'\w+)這樣就把\w+組名指定為word了,要後向引用這個分組捕獲的內容,你可以使用\k,所以上乙個例子也可以這麼寫

\b(?\w+)\b\s+\k\b

後向引用捕獲語法

**/語法

說明(exp)

匹配exp,並捕獲文字到自動命名的組裡

(?exp)匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?'name'exp)

(?:exp)

匹配exp,不捕獲匹配的文字,也不給此分組分配組號

**/語法

說明(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp後面的位置

(?!exp)

匹配後面跟的不是exp的位置

(?匹配前面不是exp的位置

例子:

-\b\w+(?=ing\b):匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如:』m singing while you』re dancing.時,它會匹配sing和danc。

-(?<=\bre)\w+\b:匹配以re開頭的單詞的後半部分(除了re以外的部分) 如:reading a book時,它匹配ading

-\b((?!abc)\w)+\b:匹配不包含連續字串abc的單詞

-\d(?!\d):匹配三位數字,而且這三位數字的後面不能是數

-(?).*(?=<\/\1>):如匹配之間的內容

當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配盡可能多的字元。以這個表示式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。

有時,我們更需要懶惰匹配,也就是匹配盡可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上乙個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。

例如:a.*?b匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。

**/語法

說明*?

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

+?重複1次或更多次,但盡可能少重複

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

?重複n到m次,但盡可能少重複

?重複n次以上,但盡可能少重複

正規表示式 正規表示式函式 筆記

筆記直接使用pycharm製作,需要原始檔請私聊。正規表示式函式 1.match 2.search 3.全域性匹配函式 全域性匹配 re.compile 正規表示式 findall 資料 import re string poythonydasadcasa pat2 p.y 懶惰模式執行 較精準 r...

正規表示式筆記

不同的語系編碼的順序不一樣 lang c 0 1 2 3 a b c d z a b c d z lang zh cn 0 1 2 3 4 a a b b c c z z 使用正規表示式時,需要留意環境的語系是什麼,否則會有不同的結果 alnum 英文大小寫字元及數字 0 9 a z a z alp...

正規表示式筆記

d 0 9中的任意乙個數字 w a z,a z,0 9,中的任意乙個,即字母數字下劃線 s 空格,製表符,換頁符等空白字元的其中任意乙個 小數點可以匹配換行符 n 以外的任意乙個字元 匹配某範圍內的任意乙個字元 ab9 匹配 a b 9 中的任意乙個 abc 匹配abc之外的任意乙個字元 a g 匹...