1. 程式人生 > 實用技巧 >python模組:re模組

python模組:re模組

一、正則表示式:一種小型的,高度專業化的程式語言

二、作用:用一些具有特殊含義的符號組合到一起(稱為正則表示式)來描述字元或者字串的方法

三、正則表示式中的元字元:

  1)" . ":匹配除了換行符以外的任意字元,當re.DOTAL被指定時,可以匹配包括換行符在內的所有字元

  2)" ^ ":匹配字串的開頭

  3)" $ ":匹配字串的結尾

result1 = re.findall('m..u', 'I like miku')  # miku
result2 = re.findall('^miku', 'miku miku you can call me miku')#miku
result3 = re.findall('
miku$', 'miku miku you can call me miku')#mi

  4)" * ":匹配0個或者任意個字元,屬於貪婪匹配,預設最大匹配,在其前面加"?"可變為非貪婪匹配

  5)" + ":匹配1個或者任意個字元,屬於貪婪匹配,預設最大匹配,在其前面加"?"可變為非貪婪匹配

  6 )" ? ":匹配0個或者1個字元

  7)"{n,m}":匹配0個或者1個字元

result4 = re.findall('miku*', 'i like mikuuuu')  # mikuuuu
result4 = re.findall('miku*?', 'i like mikuuuu
') # mik result5 = re.findall('miku*', 'i like mik') # mik result6 = re.findall('miku*', 'i like miku') # miku result7 = re.findall('miku+', 'i like mikuuuu') # mikuuuu result13 = re.findall('miku+?', 'i like mikuuuu') # miku result8 = re.findall('miku+', 'i like miku') # miku result9 = re.findall('
miku+', 'i like mik') # result10 = re.findall('miku?', 'i like mikuu') # miku result11 = re.findall('miku?', 'i like mikuu') # miku result12 = re.findall('miku?', 'i like mik') # mik result14=re.findall('miku{,2}','mikuuuuuu')#mikuu

  8)" [] ":字符集,字符集內的各個字元為或關係,[ab]表示匹配a或者b

     字符集內的元字元都將失去其原有的的意義,而“-”,“^”,“\”將被賦予特殊意義

     在字符集內" - "表示範圍,如“0-9”表示從0到9的所有數字

     “^”則表示非,反向匹配,如“^9”表示匹配除9以外的所有字元

     “\”轉義字元

  9)" \ ":轉義字元:將有意義的字元變為普通字元或將部分無意義的字元變為有意義的字元

      “\”後跟元字元,元字元將失去意義變為普通字元,

      “\w”:匹配字母數字及下劃線

      “\W”:匹配非字母數字及下劃線

      “\s”:匹配任意空白字元

      “\S”:匹配任意非空白字元

      “\d”:匹配任意十進位制數

      “\D”:匹配任意非十進位制數字字元

      “\A”:匹配字串開始

result15=re.findall('[miku]',"i like miku")#對字符集中的每個字元進行單獨匹配
result15=re.findall('[0-9]',"i like miku1314520")#匹配所有數字
result15=re.findall('[^0-9]',"i like miku1314@dq")#匹配所有非數字
result15=re.findall('[\d]',"i like miku1314@dq")#匹配所有數字
result15=re.findall('[\D]',"i like miku1314@dq")#匹配所有非數字
result15=re.findall('[\w]',"miku1314@dq_")#匹配數字,字母及下劃線
result15=re.findall('[\W]',"miku1314@dq_")#匹配非數字,字母及下劃線
result15=re.findall('[\s]',"miku1314    @dq_")#匹配空白字元
result15=re.findall('[\S]',"miku1314    @dq_")#匹配非空白字元

在使用轉義字元時。python直譯器會優先解釋,再將編譯後的結果交給re在做轉義,在語句前加“r”可以讓python直譯器將字串按原來的樣子

交給後續程序不作解釋

result16=re.findall('\\\\',"i\miku\like")
result16=re.findall(r'\\\\',"i\miku\like")#結果為空

  9)" | ":匹配“|”前的字元或者匹配其後的字元

result16=re.findall('a|c',"abcd")#['a', 'c']
result16=re.findall('a|g',"abcd")#['a']
print(result16)

  10)" )":分組

result16=re.findall('(miku)+',"i like mikuuuu")#將miku視為一個整體做“+”結果為“miku”而不是”mikuuuu“
"""分組的另一種是用方法是將匹配的結果通過一定格式賦值給指定變數,方便我們取匹配到的結果"""
result=re.search('(?P<name>[a-z]+)\d+',"520miku1314").group()#'miku1314'
result=re.search('(?P<name>[a-z]+)\d+',"520miku1314").group('name')#'miku'
print(result)