正規表示式的開發一定要使用工具(除非特別簡單的),推薦regexbuilder.
最難以理解的是零寬斷言和組,其中捕獲組說明如下
(?'group')
把捕獲的內容命名為group,並壓入堆疊(stack)
(?'-group')
從堆疊上彈出最後壓入堆疊的名為group的捕獲內容,如果堆疊本來為空,則本分組的匹配失敗
(?(group)yes|no)
如果堆疊上存在以名為group的捕獲內容的話,繼續匹配yes部分的表示式,否則繼續匹配no部分
(?!)
零寬負向先行斷言,由於沒有字尾表示式,試圖匹配總是失敗
3. 正規表示式的本身,是(位置+長度)的匹配,而且匹配的部分,要滿足正規表示式位置的連續。而零寬斷言中的
(?=exp)
匹配exp前面的位置
(?<=exp)
匹配exp後面的位置
都是匹配位置。
4.經過艱苦的思考,發現(?<=exp)的exp部分是從右向左匹配字串的。
比如,下面的正規表示式,因為(?(t)(?'f'')|(?'x'"))* 先執行,會給x的組加上匹配,這樣會導致(?(x)()|()),只會執行紅色的部分。
(?<=^[^'"]*
(?(x)()|())
[^'"]*
(?(t)(?'f'')|(?'x'"))*
[^'"]*)1
5. 《的都應該出現在前面,比如
(?匹配前面不是exp的位置
(?<=exp)
匹配exp後面的位置
正規表示式 正規表示式函式 筆記
筆記直接使用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 匹...