Python3 正則表達式

  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 '''
相關文章
相關標籤/搜索