正規表示式用於匹配字串的規則的,知識點不難,但是比較繁瑣,這篇文章把正則的基本常用點系統的整理了一下,方便自己以後要用的時候查閱,也希望給大家提供參考。廢話不多說,直接奔主題
元字元說明
.除了換行符以外的任意字元
*指定*前邊的內容可以連續重複使用任意次數
+匹配重複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 匹...