9月11日學習內容整理 正規表示式,re模組

2022-05-11 16:32:55 字數 2307 閱讀 3178

一、正規表示式:正則是很大的乙個知識點,不會僅僅是下面這些東西

1、概念:正規表示式就是一種對字串匹配的規則,注意是只對字串,正規表示式和python沒啥關係,

2、表示式:

(1)字符集:用中括號表示,例如[1-9],[012345],[a-z1-9],[a-z]

字符集代表的是乙個字元的匹配規則,不需寫標點符號,可以多種規則連著寫,按從小到大的排列(ascii值,所以大寫a到小寫z也可以,但一般不這麼寫)

(2)元字元

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

\w    匹配數字字母和下劃線的字元    大寫代表非數字字母下劃線的字元

\s  匹配空白符                大寫代表非空白符的字元

\d    匹配數字   大寫代表非數字的字元

^      匹配字串的開始,寫在開頭     [ ^ ]  若寫在字符集當中就代表除字符集中以外所有的字元 

$     匹配字串的結尾,寫在最後

(3)量詞

*  零次或多次

+ 一次或多次

?零次或一次

{1}只有1次

{2,10}2到10次

{4,}4次或多次

規則:盡量匹配多次;量詞只能操作前乙個字元的次數。也就是說不會只對乙個字元進行匹配就完了,而是將指定次數的匹配當作一次整體的匹配

(4)貪婪匹配:使用量詞匹配,每次盡量匹配多次

非貪婪匹配:在量詞後加?,就是盡量匹配最少次

(5)分組:小括號;可以把一組字元當作乙個整體,匹配這個整體也可以使用量詞使這個整體重複匹配;對於一條匹配的正則,只對需要的內容進行分組

(6)轉義符:\ 對於一些有特殊意義的字元用\可以表示本身,在python中用r轉義

補充:1、回溯演算法:例如<.>  會一直匹配,當遇到》後不會停止會繼續匹配,待匹配到最後還是沒有》就會回頭回到之前的》

2、.*?字元   取前面任意長度的字元,直到字元出現

二、re模組

1、和正則的關係:python中的re模組就是為正則服務的

2、方法

(1)findall(正則,要匹配的字串)  輸出的列表型別,元素為每乙個匹配的字串;若沒有匹配上,就輸出空列表

(2)search(正則,要匹配的字串) 輸出的是一種物件並不顯示匹配的字串,通常用group()來顯示匹配上的字串

例如:import re

ret =  search(正則,字串)

if   ret   :     若沒有匹配上,則輸出none

print(ret.group() )   注意這裡group只能顯示第乙個匹配上的字串,若本身字串很長有多個匹配項,但是group也只能顯示出第乙個

(3)match()  用法和search一樣,但是,不同的是match會自動在正則前面加上^,代表以什麼開頭,所以group輸出的值只能是字串開始匹配上的字元

(4)分割 split(正則[ab],字串)按照正則的規則依次分割,例如先匹配a後分割得到的結果再按b分割,最後輸出的是列表

(5)替換 sub(正則,要替換的內容,字串,次數) 按照正則匹配上的內容換成   要替換的內容   再輸出替換好的字串。次數是指替換幾次,也就是替換前幾個

(6)sunb()會直接顯示輸出替換的次數

(7)obj =  re.compile (正則)   將正規表示式編譯為正規表示式物件,這樣可以用來對多個字串進行相同正則的匹配

(8)finditer(正則,字串)  會直接輸出乙個迭代器,可迴圈取值,取值時要用group()

三、高階知識

1、findall優先順序查詢:會優先顯示分組即小括號裡的匹配內容,而自動不顯示括號外的匹配內容

解決辦法:(?:.........      )   只要在小括號裡的開頭加上問號和冒號,注意一定不要分開

3、匹配標籤:在search方法中,在要選擇輸出的正則規則前面加上?p《名字》,然後把正則規則用小括號括起來

import

reret=re.search('

(?p\w+)

','hello')

print(ret.group('

name

'))

匹配標籤

若遇到字串有重複的內容使我們需要的,不能每一次都寫乙個新的名字,只要在需要的正則位置兩邊加上括號,開頭寫?p=名字,而且括號裡的正則也不需要留著

import

reret=re.search('

\w+','hello')

print(ret.group('

name

'))

匹配標籤2

9月5日學習內容整理 send 生成器表示式

一 生成器函式中send的用法 value yield 1 如上式g.send 123 1 程式執行到yield 1 時停止,程式停留在yield 1 這個位置,等待下一次執行 2 當使用send時,相當於也執行g.next 這時程式會從yield 1的位置繼續執行,send傳遞過來的123會代替y...

日誌11月9日

今天學習訪問屬性 完整例項 例項class employee 所有員工的基類 empcount 0def init self,name,salary self.name name self.salary salary employee.empcount 1def displaycount self ...

9月11日培訓日記

1.講解了mysql的安裝,對安裝介面提示資訊進行了解釋,例如,資料庫伺服器程式與客戶端程式的工作關係,資料庫伺服器程式與資料庫空間的關係,mysql innodb和myisam儲存引擎的區別,事務的概念 一些過程要能同生同死,針對我們的專案,用到事務?發license和扣減貨幣 olap與oltp...