1. 程式人生 > >正則表達式總結與補充.

正則表達式總結與補充.

分組 ext obj 調用 最簡 除了 實例 知識 bject

# 正則表達式
    # 基礎知識
        # 什麽是正則
            # 一種匹配字符串的規則
        # 應用領域
            # 爬蟲, 登錄表單驗證, 自動化開發, 日誌處理
    # 正則表達式的語法
        # 元字符
            # 字符組 [] [^] | ()
                # |的用法 [1-9]\d{16}[0-9X]|[1-9]\d{14}  身份證號
                # ()的用法 [1-9]\d{14}(\d{2}[1-9X])? 身份證號
                         #
\d+(\.\d+)? 小數或者整數 # \w 匹配數字,字母,下劃線 \W與\w相反 # \d 匹配數字 \D與之相反 # \s(\n,\t, ) 匹配空字符 \n 表示匹配換行符 \t 表示匹配制表符 # \W 匹配除了數字,字母,下劃線以外的其他字符 # \D 匹配非數字 # \S 匹配非空字符 # ^ 字符的開始 # $ 字符的結尾
# . 匹配除了.以外的所有字符 # 量詞 # ? 者0次或出現一次 # + 出現一次或者無限次 # * 出現0次或者無限次 # {n} 表示某類字符重復出現n次 # {n,} 表示某類字符最少出現n次 # {n,m} 表示某類字符出現n-m次 # 特殊的用法和現象 # ?的使用 #
1. 在量詞的後面跟了一個 ? 取消貪婪匹配 非貪婪(惰性)模式 # ?? 表示只取0次(?表示取0次或者1次,而在後面添加?以後,則表示只取最簡結果,所以只取0次) # *? 同上 # +? 只取一次 # {n,}? 只取 最少的次數n次 # 李.{1,3}?和 李蓮英和 (此處表示,在以李開頭,和結尾能匹配的範圍內盡量少的匹配, # 如果超出範圍且和前面的第二個字符也不是李,或者李和兩個字挨著,則不進行) # 惰性匹配 回溯算法(表示在匹配時,會把整個字符串全部讀取完, # 然後再返回到最後一個匹配成功的字後後面停止,並將匹配的結果返回) # 最常用 .*?x 匹配任意字符直到找到一個x # \ 表示轉義 # 正則表達式總結 # 元字符 # 元字符量詞 默認貪婪匹配 # 元字符量詞? 表示惰性匹配 # 在python中使用正則表達式 # 轉義符 : 在正則中的轉義符 \ 在python中的轉義符 # re模塊 # findall (查找所有符合正則表達式的字符, 以數組的形式返回) #例子: #import re #ret = re.findall(‘\d+‘,‘123123asd123‘) # 括號內是參數 第一個是定義的表達式, 第二個是需要處理的字符串 #print(ret) # 返回值的數據類型: 列表, 返回值個數: 1個 返回之內容,所有匹配到的結果 如果沒有匹配到的結果,返回一個空列表[] #print(type(ret)) # 查看結果類型 # search(搜尋, 查找) # re.search()方法用來精確匹配並提取第一個符合規律的對象, # 而對象內容的提取則使用search方法的屬性group()來實現; # group(0)則是整個匹配的內容,返回一個實體對象; # group(1)則是匹配第一個括號裏面的內容,取出括號裏匹配的實體對象; # group(2)則是匹配第二個括號裏面的內容,取出括號裏匹配的實體對象; # group(0,1,2)則返回一個實體對象的元組; # re.search方法主要配合其屬性group()一起使用; #import re #ret2 = re.search(‘\d+‘,‘123123asd123‘) # 括號內是參數 第一個是定義的表達式, 第二個是需要處理的字符串 #print(ret.group()) # 此時 函數會在字符串內查找模式匹配, # 直到找到第一個匹配然後返回一個包含匹配信息的對象, # 該對象可以通過調用group()方法得到匹配的字符串, # 如果字符串沒有匹配,則返回None #print(type(ret) # match(不常用, 檢測是否是以某字符開頭,只打印一個,等價於search) #(檢測需要匹配的字符串的開始位置,是不是正則表達式規定的字符類型, # 如果是則進行匹配,返回匹配值,不是返回None) #import re #ret = re.match(‘\D+‘,‘a23123asd123‘) #print(ret.group()) # sub(替換) #ret = re.sub(‘\d‘, ‘H‘, ‘eva3egon4yuan4‘, 1) #將數字替換成‘H‘,參數1表示只替換1個 #print(ret) #evaHegon4yuan4 # subn #ret = re.subn(‘\d‘, ‘H‘, ‘eva3egon4yuan4‘) #將數字替換成‘H‘,返回元組(替換的結果,替換了多少次) #print(ret) # (‘evaHegonHyuanH‘, 3) 返回的結果是個元組 # split #ret = re.split(‘[ab]‘, ‘abcd‘) # 先按‘a‘分割得到‘‘和‘bcd‘,在對‘‘和‘bcd‘分別按‘b‘分割 #print(ret) # [‘‘, ‘‘, ‘cd‘] #進階方法:--- 爬蟲\自動化開發 # compile(編譯正則表達式) 預編譯功能 # 節省時間 : 只有在多次使用某一個相同的正則表達式的時候,這個compile才會幫助我們提高程序的效率. # 單個的時候不會節省時間 #obj = re.compile(‘\d{3}‘) #將正則表達式編譯成為一個 正則表達式對象,規則要匹配的是3個數字 #ret = obj.search(‘abc123eeee‘) #正則表達式對象調用search,參數為待匹配的字符串 #print(ret.group()) #結果 : 123 # finditer # 節省空間 : 所有的空間的節省,都會伴隨時間效率的提高 #實例一: #import re #ret = re.finditer(‘\d‘, ‘ds3sy4784a‘) #finditer返回一個存放匹配結果的叠代器 #print(ret) # <callable_iterator object at 0x10195f940> #print(next(ret).group()) #查看第一個結果 #print(next(ret).group()) #查看第二個結果 #print([i.group() for i in ret]) #查看剩余的左右結果 #實例二 # ret = re.finditer(‘\d‘,‘sjkhkdy982ufejwsh02yu93jfpwcmc‘) # for r in ret: # print(r.group()) # python中的正則表達式 # findall 會優先顯示分組中的內容,要想取消分組優先,(?:正則表達式) # split 遇到分組 會保留分組內被切掉的內容 # search 如果search中有分組的話,通過group(n)就能夠拿到group中的匹配的內容 # 正則表達式進階 # 分組命名 # (?P<name>正則表達式) 表示給分組起名字 # (?P=name)表示使用這個分組,這裏匹配到的內容應該和分組中的內容完全相同 # 通過索引使用分組 # \1 表示使用第一組,匹配到的內容必須和第一個組中的內容完全相同

正則表達式總結與補充.