1. 程式人生 > >正則表達式&re模塊

正則表達式&re模塊

最小 [ ] 一個 pil 字母 開始 調用 arch style

正則表達式: 功能:字符串模糊匹配查詢 元字符:. ,^, $, *, +, ?, {}, [ ],| ( ),\
  • . 通配符點:匹配除換行符以外的任意一個符號
  • ^:只匹配字符串的開始位置
  • $:只匹配字符串的末尾位置
  • *: 重復(0,+∞)
  • +:重復 [1,+∞)
  • ?:重復 [0,1]
  • {}:重復指定次數{m,n}
\:轉義符 轉義符跟元字符,元字符變普通符號 轉義符加普通符號,有特殊含義
  • \d 0-9任意數字
  • \D 非數字
  • \w 任意字母數字 [azAZ0-9-]
  • \W 非數字字母
  • \s 空格
  • \b 匹配特色字符邊界,比如空格,&,#等
\b在assic碼裏是響鈴符
>>> 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] >>>
[ ]字符集:多選一,“或” 字符集中只有三個特殊符號: - ^ \
  • - :表示範圍
  • ^:取反
  • \:轉義符依然有效
管道符:| 或 re.findall(‘-?\d+\.?\d*‘,‘234,-45,8.9,-7.9,6‘) 貪婪匹配:按規則盡可能多多匹配內容
>>> 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模塊