python學習day18 常用模組 re

2022-06-19 21:09:10 字數 3891 閱讀 9069

正則測試:

談到正則,就只和字串相關了

參考:幾個常用的非貪婪匹配:

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

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

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

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

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

.*?x 取盡量少的任意字元,直到x出現

python中的正則:

import re

findall

search

match

ret = re.findall('

[a-z]+

', '

eva egon yuan')

#返回所有滿足匹配條件的結果,放在列表裡

print

(ret)

ret = re.search('

a', '

eva egon yuan')

ifret:

print

(ret.group())

#從前往後,找到乙個就返回,返回的變數需要呼叫group才能拿到結果

#如果沒有找到,那麼返回none,呼叫group會報錯

# ret = re.match('

[a-z]+

', '

eva egon yuan')

ifret:

print

(ret.group())

#match是從頭開始匹配,如果正則規則從頭開始可以匹配上,就返回乙個變數。

#匹配的內容需要用group才能顯示

#如果沒匹配上,就返回none,呼叫group會報錯

其他功能:

ret = re.split('

[ab]

', '

abcd')

#先按'a'分割得到''和'bcd',在對''和'bcd'分別按'b'分割

print(ret) #

['', '', 'cd']

ret = re.sub('

\d', '

h', '

eva3egon4yuan4

',1)

#將數字替換成'h',引數1表示只替換1個

print(ret) #

evahegon4yuan4

ret = re.subn('

\d', '

h', '

eva3egon4yuan4')

#將數字替換成'h',返回元組(替換的結果,替換了多少次)

print(ret) #

('evahegonhyuanh',3)

obj = re.compile('\d'

)#將正規表示式編譯成為乙個 正規表示式物件,規則要匹配的是3個數字

ret = obj.search('

abc123eeee

') #

正規表示式物件呼叫search,引數為待匹配的字串

print(ret.group()) #

123ret = obj.search('

abcashgjgsdghkash456eeee3wr2

') #

正規表示式物件呼叫search,引數為待匹配的字串

print(ret.group()) #

結果 : 456

import

reret = re.finditer('

\d', '

ds3sy4784a

') #

finditer返回乙個存放匹配結果的迭代器

print(ret) #

#print(next(ret).group()) #檢視第乙個結果

#print(next(ret).group()) #檢視第二個結果

#print([i.group() for i in ret]) #檢視剩餘的左右結果

for i in

ret:

print(i.group())

兩個特殊的點:

1.findall的優先順序查詢

['oldboy'] 這是因為findall會優先把匹配結果組裡內容返回,如果想要匹配結果,取消許可權即可

問號作用:取消分組優先

print(ret) #

['www.oldboy.com']

2.split的優先順序查詢

ret=re.split("

\d+","

eva3egon4yuan")

print(ret) #

結果 : ['eva', 'egon', 'yuan']

ret=re.split("

(\d+)

","eva3egon4yuan")

print(ret) #

結果 : ['eva', '3', 'egon', '4', 'yuan']

#在匹配部分加上()之後所切出的結果是不同的,

#沒有()的沒有保留所匹配的項,但是有()的卻能夠保留了匹配的項,

#這個在某些需要保留匹配部分的使用過程是非常重要的。

一段簡單的爬蟲**:

爬取豆瓣前250影片的資訊:

import

refrom urllib.request import

urlopen

defgetpage(url):

response =urlopen(url)

return response.read().decode('

utf-8')

defparsepage(s):

ret =re.findall(

'.*?.*?(?p\d+).*?(?p.*?)''

.*?(?p.*?).*?(?p.*?)評價

',s,re.s)

return

retdef

main(num):

url = '

' %num

response_html =getpage(url)

ret =parsepage(response_html)

print

(ret)

count =0

for i in range(10): #

10頁main(count)

count += 25

flag:

flags有很多可選值:

re.i(ignorecase)忽略大小寫,括號內是完整的寫法

re.m(multiline)多行模式,改變^和$的行為

re.s(dotall)點可以匹配任意字元,包括換行符

re.l(locale)做本地化識別的匹配,表示特殊字符集 \w, \w, \b, \b, \s, \s 依賴於當前環境,不推薦使用

re.u(unicode) 使用\w \w \s \s \d \d使用取決於unicode定義的字元屬性。在python3中預設使用該flag

re.x(verbose)冗長模式,該模式下pattern字串可以是多行的,忽略空白字元,並可以新增注釋

python學習 Day18 異常

異常即是乙個事件,該事件會在程式執行過程中發生,影響了程式的正常執行。一般情況下,在python無法正常處理程式時就是發生乙個異常,異常是python物件,表示乙個錯誤,當python指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。異常處理常用形式 try 正常操作 except 發生異常,...

前端學習Day18

一 3d的旋轉 增加了rotatez 和 rotate3d x,y,z,度數 注 x y z 它們是乙個向量值,0是不旋轉,1是旋轉 eg rotate3d 1,1,0,45deg 等價於 rotatex 45deg rotatey 45deg 二 3d的縮放 增加了 scalez 和 scale3...

寒假學習day18

今天學習了 布局的stretchcolumns 拉伸列 流程 在tablelayout中設定了四個按鈕,接著在最外層的tablelayout中新增以下屬性 android stretchcolumns 1 設定第二列為可拉伸列,讓該列填滿這一行所有的剩餘空間,如下 android id id tab...