正則測試:
談到正則,就只和字串相關了
參考:幾個常用的非貪婪匹配:
*? 重複任意次,但盡可能少重複python中的正則:+? 重複1次或更多次,但盡可能少重複
?? 重複0次或1次,但盡可能少重複
? 重複n到m次,但盡可能少重複
? 重複n次以上,但盡可能少重複
.*?x 取盡量少的任意字元,直到x出現
import re
findallsearch
match
ret = re.findall('[a-z]+
', '
eva egon yuan')
#返回所有滿足匹配條件的結果,放在列表裡
(ret)
ret = re.search('
a', '
eva egon yuan')
ifret:
(ret.group())
#從前往後,找到乙個就返回,返回的變數需要呼叫group才能拿到結果
#如果沒有找到,那麼返回none,呼叫group會報錯
# ret = re.match('
[a-z]+
', '
eva egon yuan')
ifret:
(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
importreret = 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影片的資訊:
importrefrom 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)
(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...