1 ''' 2 正則表達式,又稱規則表達式,在代碼中常簡寫爲regex、regexp或RE,是計算機科學的一個概念。 3 正則表一般被用來檢索、替換那些符合某個模式(規則)的文本。 4 正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱爲「元字符」))操做的一種邏輯公式, 5 就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。 6 正則表達式是一種文本模式,模式描述在搜索文本時要匹配的一個或多個字符串。 7 ''' 8 9 ''' 10 首先要清楚,字符串提供的方法是徹底匹配 11 正則表達式則會給咱們提供模糊匹配,經過re模塊調用 12 ''' 13 # a = 'Hobbyer is a student!' 14 # print(a.find('bby')) # 查找 15 # chg = a.replace('is','are') # 替換元素 16 # print(chg) 17 # print(a.split('u')) # 分割 18 ''' 19 博客園 Infi_chu 20 ''' 21 22 import re # 調用re模塊 23 # print(re.findall('b\b{2}l','Hobbyer is a student!')) # findall(規則,字符串,修改匹配規則),徹底比配 24 25 ''' 26 正則元字符(11個): 27 . ^ $ * + ? {} [] | () \ 28 ''' 29 # # . 是通配符 30 # a1 = 'hello world' 31 # print(re.findall('w..l',a1)) # . 只能匹配任意一位,任意一個字符,多了就會不識別 32 # print(re.findall('w..l','w\norld')) # . 不能匹配換行符,除了換行符均可以匹配一位 33 # print(re.split('[a,c]','ddabcffadacd')) # 有順序的分割,中間同時出現ac因此會出現空 34 # print(re.sub('e.l','wc',a1)) # 替換 35 # 36 # a3 = re.compile('\.com') # 屢次用的方法,提升效率 37 # a3_out = a3.findall('www.example.com.cn') 38 # print(a3_out) 39 ''' 40 博客園 Infi_chu 41 ''' 42 # # ^ 43 # print(re.findall('w...d',a1)) 44 # print(re.findall('^w...d',a1)) # 從最開始匹配,若是有則出現,沒有則匹配不到 45 # 46 # # $ 47 # print(re.findall('h...o$',a1)) # 只在結尾匹配 48 # 49 # # * 重複前面字符,大於等於零次 50 # print(re.findall('b.*u','http://www.baidu.com')) # 重複匹配,好幾個點可用一個*表示 51 # print(re.findall('.*',a)) # 輸出結果後方的'',是另外的狀況(空狀況,匹配0) 52 ''' 53 博客園 Infi_chu 54 ''' 55 # # + 重複匹配,大於等於1次 56 # print(re.findall('.+',a)) # 輸出結果必須有,則不會出現空的狀況 57 # 58 # # ? 匹配範圍零次或1次 59 # print(re.findall('w?r','wwrr')) # 能夠匹配0-1個字符 60 # 61 # # {} 匹配任意次數 62 # print(re.findall('w{5}r','wwwrrwwwwwrr')) # 匹配5個w和1個r 63 # print(re.findall('w{1,5}r','wwwrrwwwwwrrwr')) # 匹配1-5次 64 ''' 65 博客園 Infi_chu 66 ''' 67 # # [] 是字符集 68 # print(re.findall('w[c,e]r','wer')) # []中能夠添加任意字符或字符串,多選1 69 # print(re.findall('w[a-z]','wff')) # 範圍a-z 70 # print(re.findall('[a,*]','ww')) # * 不在是以前的功能,在[]之中只是普通的*號,可是(\ ^ -)例外 71 # print(re.findall('[a-z,0-9,A-Z]','afsasdSFA54asS')) 72 # print(re.findall('[^c]','acs')) # ^ 在[]是取反的意思 73 # print(re.findall('[^a,b]','abcdefg')) # 非a非b 74 ''' 75 博客園 Infi_chu 76 ''' 77 # \ 78 ''' 79 反斜槓後邊跟元字符,使其去除特殊功能, 80 反斜槓後邊跟普通字符,使其具備特殊功能 81 \d 匹配十進制數 82 \D 匹配任何非數字字符 83 \s 匹配任何空白字符 84 \S 匹配任何非空白字符 85 \w 匹配任何字母字符 86 \W 匹配任何非字母字符 87 \b 匹配一個單詞和空格間的位置 88 ''' 89 # print(re.findall('\d{2}','asdw5d31asdw1a3d5s48w4d3a1w')) # 匹配兩位數字 90 # print(re.findall('\swww','fg www')) # 匹配空白字符 91 # print(re.findall(r's\b','s is a s$udent')) # \b匹配了特殊字符 92 # print(re.findall(r's\b','s is a student')) 93 # c1 = re.search('wc','wsdwcasdwcaff') # search 只匹配找到的第一個 94 # print(c1) 95 # print(c1.group()) # 直接輸出匹配內容,可是search沒有匹配成功,調用group會報錯 96 # print(re.findall('\\\\c','afekK:\c')) # 這裏注意Python解釋器中的轉義,交給re模塊以後又有轉義,因此須要4個 97 # print(re.search(r'\bbasd','basd')) # r表示原生字符串,不須要轉義 98 ''' 99 博客園 Infi_chu 100 ''' 101 # # () 分組 102 # print(re.search('(wc)+','fswfefwcdwc')) # 分組 103 # print(re.search('(wc)+','fswfefwcwc')) 104 ''' 105 博客園 Infi_chu 106 ''' 107 # # | 或 108 # print(re.search('(wc)|ff','ffwca')) # 或 109 110 ''' 111 較高級的用法 112 ''' 113 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo')) # ?P<>起名的格式,名字放在<>中,後面爲匹配規則 114 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo').group()) 115 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo').group('id')) 116 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo').group('name')) 117 118 ''' 119 方法總結 120 正則表達式的方法: 121 findall():返回全部的結果,返回到1個列表當中 122 search():返回一個對象(object),返回匹配到的第一個對象,對象能夠調用group()方法返回匹配內容 123 match():只在字符串開始的時候匹配,返回第一個匹配到的對象 124 split():分割點 125 sub():替換 126 compile():能夠用來規定規則 127 ''' 128 129 130 ''' 131 博客園 Infi_chu 132 '''