淺談正則表達式一
阿新 • • 發佈:2019-04-07
導入 匹配 括號 .com 位置 obj eating www. 貪婪
‘‘‘ 正則表達式作用:判斷一個字符串是否匹配給定的格式:例如判斷用戶註冊賬號是否滿足格式,抓取頁面鏈接等。 ‘‘‘ import re #使用正則表達式需要導入re模塊 st = "[email protected]" st1 = re.findall(r‘^[a-zA-Z0-9][email protected][a-zA-Z0-9]+\.com$‘,st) #前面為匹配的規則,後面為原始字符串 print(st1) #findall方法:在字符串中找到正則表達式所匹配的所有字符串,以列表形式返回,如果沒有找到,返回空列表。 st2 = "小姐姐正在吃東西,小姐姐樣子好可愛。" st3 = re.findall("小姐姐",st2) print(st3) #match方法:從字符串起始位置匹配,匹配成功,返回一個匹配對象(對象中包含了匹配到的信息),匹配不成功,match()返回為空 st4 = re.match("小姐姐",st2)#註意match方法只能匹配一個 print(st4) #<re.Match object; span=(0, 3), match=‘小姐姐‘> #search方法:掃描整個字符串,匹配成功,返回一個匹配對象,只能匹配一個。 st5 = re.search("小姐姐",st2) print(st5)#sub替換方法: st6 = re.sub("小姐姐","狗狗",st2) print(st6) #狗狗正在吃東西,狗狗樣子好可愛。 #-----------------------元字符------------------------------------ ‘‘‘ 什麽是元字符:本身具有特殊含義的字符。 常用元字符: .:指通配符,代表任意一個字符 []:通常用來匹配一個字符集,匹配[]中列舉的字符. ^:匹配以什麽開始的字符串 $:匹配以什麽結尾的字符串 *:匹配一個字符出現0次或者無限次 +:匹配前一個字符出現1次或者無限次 ?:匹配前一個字符出現0次或者1次,即要麽有1次,要麽沒有 {m}:匹配前一個字符出現m次 {m,n}:匹配前一個字符出現m到n次 \:反斜杠後邊跟元字符去除特殊功能 反斜杠後邊跟普通字符實現特殊功能 \d:匹配任何十進制數,相當於類[0-9] re.findall("\d","ww3361gg")也可以寫為re.findall("[\d]","ww3361gg") 結果為:[‘3‘,‘3‘,‘6‘,‘1‘] \D:匹配任何非數字字符,相當於類[^0-9] \w:匹配任何字母數字字符相當於[a-zA-Z0-9] re.findall("\w","wwww.5362.ew") 結果為:[‘w‘,‘w‘,‘w‘,‘w‘,‘5‘,‘3‘,‘6‘,‘2‘,‘e‘,‘w‘] \W:匹配任何非字母數字字符相當於[^a-zA-Z0-9] \b:匹配任何一個單詞邊界 \B:匹配非單詞邊界 (ab):將括號中字符作為一個分組 ...‘‘‘ # -----------------元字符.的使用------------------------------- st1 = "麗薩在吃漢堡" s = re.findall(r‘麗薩.‘,st1) print(s) #[‘麗薩在‘] #----------------元字符[]的使用--------------------------------- st2 = "I love you" s = re.findall(r"[love]",st2) print(s) #[‘l‘, ‘o‘, ‘v‘, ‘e‘, ‘o‘] st3 = "露西 is eating apple" s = re.findall(r"[a-z]",st3) print(s)#[‘i‘, ‘s‘, ‘e‘, ‘a‘, ‘t‘, ‘i‘, ‘n‘, ‘g‘, ‘a‘, ‘p‘, ‘p‘, ‘l‘, ‘e‘] # ------------------------元字符*的使用------------------------- st = "ac" st1 = re.findall(r"ab*c",st) print(st1) #[‘ac‘] 0次也可以匹配到 st = "abbbbc" st1 = re.findall(r"ab*c",st) print(st1) #[‘abbbbc‘] #-------------------------元字符+的使用------------------------- st = "ac" st1 = re.findall(r"ab+c",st) print(st1) #[] 0次匹配不到 st = "abbbbc" st1 = re.findall(r"ab+c",st) print(st1) #[‘abbbbc‘] # -------------------元字符?的使用----------------------------- st = "abbbbc" st1 = re.findall(r"ab?c",st) print(st1) #[] #--------------------元字符{m}的使用--------------------------- st = "abbbbc" st1 = re.findall(r"ab{3}c",st) print(st1) #[] st = "abbbbc" st1 = re.findall(r"ab{4}c",st) print(st1) #[‘abbbbc‘] #------------------元字符{m,n}的使用--------------------------- st = "abbbbc" st1 = re.findall(r"ab{1,4}c",st) print(st1) #[‘abbbbc‘] st = "abbbbc" st1 = re.findall(r"ab{1,5}c",st) print(st1) #[‘abbbbc‘] st = "abbbbc" st1 = re.findall(r"ab{,6}c",st) print(st1) #[‘abbbbc‘] st = "abbbbc" st1 = re.findall(r"ab{4,}c",st) #最少四次到無限次 print(st1) #[‘abbbbc‘] #----------------元字符^的使用-------------------- st = "abbc abbdr abbea" st1 = re.findall(r"^abb",st) print(st1)#[‘abb‘] #-----------------元字符$的使用-------------------- st = "abbc abbdr abbea" st1 = re.findall(r"ea$",st) print(st1)#[‘ea‘] #---------------元字符\b的使用-------------------- st = "abbc abbdr abbea" st1 = re.findall(r"\babb",st) print(st1)#[‘abb‘, ‘abb‘, ‘abb‘] #----------------元字符\B的使用------------------- st = "abbc abbdr abbea" st1 = re.findall(r"\Bbb",st) print(st1)#[‘bb‘, ‘bb‘, ‘bb‘] #----------------元字符\的用法------------------- st = "小姐姐正在吃東西,小姐姐好可愛,小姐姐吃飽了" st1 = re.findall(r"小姐姐\?",st) #之前?代表匹配前一個字符出現0次或者1次,即要麽有1次,要麽沒有,加了r防轉義。 print(st1) #會把滿足要求的都獲取到[‘小姐姐‘, ‘小姐姐‘, ‘小姐姐‘] #--------------------貪婪與非貪婪匹配------------- st = "aaabbbbaaaabbbaaaaaabbb" st1 = re.findall(r"a{2,4}",st) #正常模式-貪婪匹配 print(st1) #[‘aaa‘, ‘aaaa‘, ‘aaaa‘, ‘aa‘] st = "aaabbbbaaaabbbaaaaaabbb" st1 = re.findall(r"a{2,4}?",st) #非貪婪匹配,匹配最短的aa。 print(st1) #[‘aa‘, ‘aa‘, ‘aa‘, ‘aa‘, ‘aa‘, ‘aa‘]
淺談正則表達式一