2018年12月13日 星期四

Python re 模組 (備忘)


功能太多,每次要用都要重學的模組

要找保留字的話,前面要加  \ 符號

 .   代替任何字元

 *  重複此符號前面的項目零次或多次
     項目可為 [] 所指定的內容,或是 

 +   重複此符號前面的項目至少一次,至多次
      譬如找數字  [0-9]+ 找一個以上的數字串
     也可用 \d+ 來實現

[...]  搜尋 [] 內指定的字元,譬如只找數字 [0-9] ,只找英文字[a-zA-Z],只找小寫字母[a-z]

(?#...)  在本已複雜難懂的正則表達式中加註釋,使字串更難以閱讀 (?#....) 中的內容會被忽略

 (?<=....)   找尋字串的開頭須符合 括號內指定的項目  
          
 (?=....)     找尋字串的結尾須符合 括號內指定的項目  

 (?!....)     找尋字串的結尾不包含 括號內指定的項目  


re.compile(pattern[, flags])

re.search(pattern, string[, flags])


譬如 telnet 有控制碼 '\x1b[...;...m' 做前景被景顏色控制
可用pattern  '\x1b\[[0-9;]*m' 來找出有關顏色控制的字串
若無,則回傳 None

a = re.search('\x1b\[[0-9;]*m', receivedata)
# 由於 [ 為保留字,要找保留字符時,前面要加 \
# 數值與 ; 有可能出現多次,故使用 * 來表達*前面的項目要重複找
if a != None:
    control_code = receivedata[a.start():a.end()]  # 取出控制碼