正則表達式在線測試網址:https://0x9.me/dGRPQ正則表達式
正則表達式手冊:https://0x9.me/wvkrD算法
1.判斷某一個字符串是否符合規則 例(註冊網頁 判斷手機號,身份證是否合法)函數
2.將符合規則的內容從一個龐大的字符串體系當中提取出來。 例(爬蟲,日誌分析)測試
是一種規則,用來約束字符串的規則spa
# \w \W # print(re.findall("\w","fsjdk1A")) #['f', 's', 'j', 'd', 'k', '1', 'A'] # print(re.findall('\W','hello egon 123')) #[' ', ' '] #\s \S # print(re.findall('\s','hello egon 123')) #\s表示全部的空格換行和tab鍵 # print(re.findall('\S','hell*o egon 123')) #\S非空格 #\A與^ \Z與$ 同樣 # print(re.findall('\Ahe','hello egon 123')) #['he'],\A==>^ # print(re.findall('123\Z','hello egon 123')) #['he'],\Z==>$ # print(re.findall('^h','hello egon 123')) #['h'] # print(re.findall('3$','hello egon 123')) #['3'] # #\b # l1 = "sing 1studings tuding1 swimming" # ret = re.findall(r"\b[a-zA-Z]*ing[a-zA-Z]*\b",l1) # print(ret) #['sing', 'studings', 'tuding', 'swimming'] #重複匹配 #. 除了換行符以外的任意字符 # print(re.findall("a.b","fsavbfsjajbfa b")) #['avb', 'ajb', 'a#b'] # 九、1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)) # 1)從上面算式中匹配出最內層小括號以及小括號內的表達式 # import re # l1 = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))" # print(re.findall(r'\([^()]+\)',l1))
#第一題:一、匹配整數或者小數(包括正數和負數) # import re # def func(str1): # ret = re.findall("-?\d+(?:\.\d+)?",str1) # return ret # print(func("afdkj123.21afkj-23fafs53.324")) #第二題: #二、匹配年月日日期 格式2018-12-06 # import re # ret =re.findall("\d{4}-[1]?\d-[1-3]?\d","2018-05-6") # print(ret) #第三題: #三、匹配qq號 # import re # ret = re.findall("[1-9]\d{4,10}","54654444") # print(ret) #第四題: # 四、11位的電話號碼 # import re # ret = re.findall("^[1][3-8]\d{9}$","18323978615") # print(ret) #第五題: # 五、長度爲8-10位的用戶密碼 : 包含數字字母下劃線 # import re # ret = re.findall("(?:\d|[a-zA-Z]|_){8,10}","aAk123_5fs") # # ret = re.findall("\w{8,10}","asflj123lk") # print(ret) #第六題: # 六、匹配驗證碼:4位數字字母組成的 # import re # ret = re.findall("(?:\d|[a-zA-Z]){4}","afhz") # print(ret) #第七題: # 七、匹配郵箱地址 # import re # ret = re.findall("^[a-zA-Z]\w{4,16}(?:\d|[a-zA-Z])@(?:163|126|yeah)\.com$","asf123@163.com") # print(ret) #第八題: # 八、從相似 # <a>wahaha</a> # <b>banana</b> # <h1>qqxing</h1> # 這樣的字符串中, # 1)匹配出wahaha,banana,qqxing內容。 # 2)匹配出a,b,h1這樣的內容 # import re # ret = re.search("<(\w+)>([a-zA-Z]+)</(\w+)>","<asf>asfkj</asfd>") # #第一問 # l1 = ret.group(2) # print(l1) # #第二問 # l2 = ret.group(1) # print(l2) #第九題 # 九、1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)) # 1)從上面算式中匹配出最內層小括號以及小括號內的表達式 # import re # l1 = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))" # print(re.findall(r'\([^()]+\)',l1)) # #第十題: # 十、從相似9-2*5/3+7/3*99/4*2998+10*568/14的表達式中匹配出從左到右第一個乘法或除法 import re # str1 = "9-2*5/3+7/3*99/4*2998+10*568/14" # l1 = re.search("\d+(\.\d)?(?:\*|\/)\d+(\.\d)?","9-2*5/3+7/3*99/4*2998+10*568/14") # print(l1.group())
默認貪婪,回溯算法3d
量詞? 表示非貪婪,惰性匹配日誌
.*?x 表示匹配任意長度的字符遇到x就中止code
*? 重複任意次,但儘量少重複 +? 重複1次或更屢次,但儘量少重複 ?? 重複0次或1次,但儘量少重複 {n,m}? 重複n到m次,但儘量少重複 {n,}? 重複n次以上,但儘量少重複
import re ret = re.findall('a', 'eva egon yuan') # 返回全部知足匹配條件的結果,放在列表裏 print(ret) #結果 : ['a', 'a'] ret = re.search('a', 'eva egon yuan').group() print(ret) #結果 : 'a' # 函數會在字符串內查找模式匹配,只到找到第一個匹配而後返回一個包含匹配信息的對象,該對象能夠 # 經過調用group()方法獲得匹配的字符串,若是字符串沒有匹配,則返回None。 ret = re.match('a', 'abc').group() # 同search,不過盡在字符串開始處進行匹配 print(ret)