python正則表達式詳解


元字符

  . 匹配任意一個字符(不包括換行符)
  [a-z] 字符集合,一個字符的集合,可匹配其中任意一個字符
  [^a-z] 字符集合,匹配除集合內的任意一個字符
  ^ 匹配開始位置,多行模式下匹配每一行的開始
  \b 匹配單詞開始或結束位置的字符
  \B 匹配不位於單詞開始或結束位置的字符
  \d 匹配一個數字, 相當於 [0-9]
  \D 匹配非數字,相當於 [^0-9]
  \s 匹配一個空白字符,包括換行符、制表符、空格。相當於 [ \f\r\n\t\v]
  \S 匹配非空白字符
  \w 匹配[a-zA-Z0-9_],包括中文
  \W 匹配\w之外的字符
  $ 匹配結束位置,多行模式下匹配每一行的結束
  * 表示前面的正則表達式重復0次或多次
  + 表示前面的正則表達式重復至少1次
  ? 表示前面的正則表達式重復0次或1次
  {n} 重復n次
  {n,} 重復至少n次
  {n,m} 重復n到m次
  \ 轉義字符,跟在其后的字符將失去作為特殊元字符的含義,例如\\.只能匹配.,不能再匹配任意字符
  x|y 匹配x或者y
  (pattern) 分組,捕獲后會自動分配組號從1開始,key改變優先級
  \數字 匹配對應的分組
  (?:pattern)如果僅僅為了改變優先級,就不需要捕獲分組
  (?<name>exp)分組捕獲,但是可以通過name訪問分組。python語法必須是(?P<name>exp)
  (?=exp) 斷言exp一定在匹配的右邊出現,表示斷言后面一定有exp
  (?<=exp) 斷言exp一定在匹配的左邊出現,表示斷言前面一定有exp前綴
  (?<=...) 逆序肯定環視,表示所在位置左側能夠匹配括號內正則
  (?!exp) 斷言exp一定不會出現在右側,也就是說斷言后面一定不是exp
  (?<!exp) 斷言exp一定不會出現在左側
  *? 匹配任意次,但盡可能少重復
  +? 匹配至少1次
  ?? 匹配0次或1次
  {n,}? 匹配至少n次
  {n,m}? 匹配至少n次,至多m次
 
 
python的正則表達式
 
常量 (使用 |位或 開啟多種選項)
  re.M 多行模式
  re.S 單行模式
  re.I 忽略大小寫
  re.X 忽略表達式中的空白字符
方法
編譯
re.compile(pattern, flags=0)
設定flags,編譯模式,返回正則表達式對象regex
pattern就是正則表達式字符串,flags是選項。
單次匹配
re.match(pattern, string, flags=0)
regex.match(string[, pos[, endpos]])
match匹配從字符串開頭匹配,regex對象match方法可以重設置開始位置和結束位置。返回match對象
re.search(pattern, string, flags=0)
regex.search(string[, pos[, endpos]])
從頭搜索直到第一個匹配,regex對象search方法可以重設置開始位置和結束位置。返回match對象
re.fullmatch(pattern, string, flags=0)
regex.fullmatch(string[, pos[, endpos]])
整個字符串和正則表達式匹配
 
全文搜索
re.findall(pattern, string, flags=0)
regex.findall(string[, pos[, endpos]])
對整個字符串,從左到右匹配,返回所有匹配項的列表
re.finditer(pattern, string, flags=0)
regex.finditer(string[, pos[, endpos]])
對整個字符串,從左到右,返回所有匹配項,返回迭代器
 
匹配替換
re.sub(pattern, replacement, string, count=0, flags=0)
regex.sub(replacement, string, count=0)
  使用pattern對字符串進行匹配,對匹配項使用replacement替換。
  replacement可以是str,bytes,function
re.sub(pattern, replacement, string, count=0, flags=0)
regex.sub(replacement, string, count=0)
  同sub返回一個元組(new_string, number_of_subs_made)
 
分割字符串(不能指定多個字符進行分割)
re.split(pattern, string, maxsplit=0, flags=0)
  分割字符串
 
分組
使用小括號的pattern捕獲的數據陪放到組group中
match, search函數可以返回match對象;findall返回字符串列表;finditer返回一個個match對象
如果pattern中使用分組,如果有匹配的結果,會在match對象中
  1.使用group(N)方式返回對象分組,1到N是對應的分組,0返回整個匹配的字符串
  2.如果使用了命名分組,可以使用group('name')的方式分組
  3.也可以使用groups()返回所有組
  4.使用groupdict()返回所有命名的分組
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM