正則表達式&re模塊
阿新 • • 發佈:2017-06-27
最小 [ ] 一個 pil 字母 開始 調用 arch style 正則表達式:
功能:字符串模糊匹配查詢
元字符:. ,^, $, *, +, ?, {}, [ ],| ( ),\
- . 通配符點:匹配除換行符以外的任意一個符號
- ^:只匹配字符串的開始位置
- $:只匹配字符串的末尾位置
- *: 重復(0,+∞)
- +:重復 [1,+∞)
- ?:重復 [0,1]
- {}:重復指定次數{m,n}
- \d 0-9任意數字
- \D 非數字
- \w 任意字母數字 [azAZ0-9-]
- \W 非數字字母
- \s 空格
- \b 匹配特色字符邊界,比如空格,&,#等
>>> re.findall(r‘[ ]字符集:多選一,“或” 字符集中只有三個特殊符號: - ^ \c\\l‘,‘abc\le‘) [‘c\\l‘] >>> re.findall(‘c\\\\l‘,‘abc\le‘) [‘c\\l‘] >>> re.findall(‘c\\\l‘,‘abc\le‘) [‘c\\l‘] >>>
- - :表示範圍
- ^:取反
- \:轉義符依然有效
>>> import非貪婪模式:在規則後加’?’ 切換成非貪婪模式,在該模式下,按著最小重復數匹配re >>> res=re.findall(‘abc+‘,‘abcccccdvd‘) >>> print(res) [‘abccccc‘]
s="<div>yuan<img></div><a href=""></div>"
#
# ret=re.findall("<div>.*?</div>",s) # <div>yuan<img></div><a href=></div>
# print(ret)
# ret=re.search("<div>.*?</div>",s) # <div>yuan<img></div><a href=></div>
# print(ret)
幾個常用的非貪婪匹配Pattern
*? 重復任意次,但盡可能少重復 +? 重復1次或更多次,但盡可能少重復 ?? 重復0次或1次,但盡可能少重復 {n,m}? 重復n到m次,但盡可能少重復 {n,}? 重復n次以上,但盡可能少重復
.*?的用法:
-------------------------------- . 是任意字符 * 是取 0 至 無限長度 ? 是非貪婪模式。 何在一起就是 取盡量少的任意字符,一般不會這麽單獨寫,他大多用在: .*?a 就是取前面任意長度的字符,到底一個 a 出現Re模塊 (): 分組 分組後查找後只顯示分組裏的內容 顯示全部的內容在分組括號裏加上’?:’ 有名分組:
res=re.search(‘(?P<year>20\d{2})-(?P<mouth>[01]\d)‘,‘2014-08‘) >>> res.group(‘year‘) ‘2014‘ >>> res.group(‘mouth‘) ‘08‘
re.findall(pattern, str,flag)
===>結果是個列表 ===>優先篩選(分組的情況) Re.search(pattern, str,flag) ==>只匹配第一個符合條件 ==>匹配成功,返回對象。匹配失敗,返回None Re.match(pattern, str,flag) ==>只從開始位置匹配符合條件 ==>匹配成功,返回對象。匹配失敗,返回None re.split(pattern,str,max) Max:最大分割次數 re.compile(pattern,flag)編譯 返回一個可調用的對象obj=re.compile("\d+") ret=obj.findall("akhsd4325asdk43") # re.findall("\d+","") print(ret)
Re.finditer( ) 返回叠代器對象
# ret=re.finditer("\d+","dasfjk324khk4234kj234hkj234hkj234kj234k2j34hk2j3h4") # print(ret) # # print(next(ret).group())
正則表達式&re模塊