天天看點

2020-11-11Python正則學習筆記

導入模闆

①import re      導入正規表達式的子產品    

re.findall

②findall:     re.findall('字元串',變量)   傳回一個清單 ,可通過:判斷清單長度(用 len() )是否大于零判斷是否含有所找字元串;     正規表達式側重在規則(靈魂就在規則,隻是單純的找指定字元串(常量字元串)并沒有意義(python内置函數就可完成這些功能)

③有意義的正規表達式: 大部分的與字元串相關的操作都可以用for循環解決,但是for循環廢腦子且不夠簡潔= = 

    findall :  re.findall('\d',a)  尋找a中所有的數字,并以清單的形式傳回。

     正規表達式 由 普通字元 和 元字元 組成,前者就是具體的字元,我們學的是後者

     \D: 傳回所有非數字字元組成的清單      -----正規表達式的元字元非常多,可在用的時候查閱手冊~

     重點是 正則比對的規則

④字元集特點: 1>出現在 []裡的是或關系         2>   ^表示非        例:[^cdf]表示 不是c或d或f的字元               3>  c-f :從c到f的字元     

 4> \d  0-9  等同于  [0-9]   ;     \D  非數字  等同于 [^0-9]  ; \w 字母下劃線(單詞字元)   等同于 [A-Za-z0-9_]  ;\W  \w的非,包括空格,&,\n, \r,\t ; \s:比對空格,回車,制表,換行 (空白字元)  \S : \s的非;   . 比對除換行符之外其他所有字元

⑤數量詞:  正則比對,本質是一個字元一個字元比對的,隻能比對單一字元;但是可以通過規則比對多個字元

 若想比對多個,用 {}  ----   {}中的數字是長度 例:{3}隻比對長度為3;{3,6}長度從3到6的單詞

上述不定長單詞擷取,與 “貪婪”和“非貪婪”有關,python預設情況下是“貪婪”模式------正則比對預設盡可能多的尋找符合條件的字元, 若是想以非貪婪模式比對,須在{}後加?,  例如{3,6}?運作結果幾乎隻和3個一組一緻?

⑥數量詞小結:1> {}  指定數量或數量範圍        2> * 比對0次或者無數次   例: n* 比對0個或者無數個n      3> +  比對一次或者無限多次     4> ? 比對0次或者1次(ps: 隻比對前幾個字元,若是在滿足1個的情況下後邊還有,會傳回比對到一個的結果------?可用于去重操作~     5>注意區分 貪婪模式下的 ? 和數量詞中的 ?

⑦邊界比對---完整比對整個字元串 : 加上前後邊界符: 前加^  後加 $       例:判斷字元串s是否是長度為4-8的整數  re.findall('^\d{4,8}$',s)             ^從字元串的開始進行比對          $從字元串的末尾開始比對   ps:^ 和 $ 可單獨用

⑧判斷字元串中含有多少重複單詞(字元組合): 組:用()括起來的内容是一個組   每個字元之間是且關系  ps:[]每個字元之間是或關系

⑨findall第三個參數---模式         re.I  忽略大小寫,re.S  點号. 比對換行符(預設不比對換行符) ,第三個參數可以由多個模式,不同模式之間用 | 連接配接 (此處是 且 關系,而不是常見的 或 關系)

re.sub

⑩re.sub  正則替換   函數參數清單:

2020-11-11Python正則學習筆記

count:預設 0 比對所有的pattern,其他數字含義:比對并替換的最大次數;

r1=re.sub('C#','C++',s)  作用 同python的内置函數replace (r2=s.replace('C#','C++') , ps:字元串是不可變的,replace後要用新的字元串接收~

⑩① sub的強大之處在于,第二個參數可以是函數!

2020-11-11Python正則學習筆記

ps: 函數的傳回值必須是 字元串

search與match

⑩②  search:搜尋整個字元串,直到找到第一個比對的結果; 傳回的結果不是清單,而是一個對象,需要用group() 傳回字元串 或者 span傳回 位置(a,b)a為所找字元串的上一個字元所在數字,b為所找字元串最有一個字元位置

          match:從字元串首字母開始進行比對

分組

⑩③ group()   傳入0,傳回全部比對的字元;傳入1,傳回第一個分組的字元串;傳入2,傳回第二個分組的字元串;可同時傳入 0,1,2  即 r.group(0,1,2)

ps:search的傳回結果可用group()

2020.11.11