正則表達式
#導入模塊 import re text = r"rubyrjavamatlabpythonhtmlc++" p = r"python" pat = re.compile(p) mat = re.search(pat, text) print(mat.group(0)) #說明,符號“.”代表匹配包括本身在內的任何一個字符,“+”表示將前面的一個字符或者表達式重復一次或者多次,至少有一次 #下例中如果p1改為r"<test>.<test>",那么得到的匹配結果為空 #findall返回所有符合要求的列表 text1 = r"<test>python<test>" p1 = r"<test>.+<test>" pat1 = re.compile(p1) print('1:', pat1.findall(text1)) #如果想要匹配“.”本身,那么需要借助轉義符“\” #下例中其實不加“\”也能得到正確的結果,因為“.”可以匹配任意一個字符,包括它本身 text2 = r"http://www.baidu.com/" p2 = r"www\.baidu\.com" pat2 = re.compile(p2) print('2:', pat2.findall(text2)) #符號“+”將前面一個字符或者子表達式重復一遍或者多遍,符號“*”匹配前面0次或者多次 #比較以下結果,前一個不能夠完成匹配,后一個可以匹配到python text3 = r"rubypythonpythonmatlab" p3 = r"pythonn+" pat3 = re.compile(p3) print('3:', pat3.findall(text3)) text4 = r"rubypythonmatlab" p4 = r"pythonn*" pat4 = re.compile(p4) print('4:', pat4.findall(text4)) #[]表示匹配里面的任意一個字符 text5 = r"aython bython cython python" p5 = r"[pth]ython" pat5 = re.compile(p5) print('5:', pat5.findall(text5)) #[^]表示除了里面的字符以外都匹配 text6 = r"aython bython cython python" p6 = r"[^p]ython" pat6 = re.compile(p6) print('6:', pat6.findall(text6)) #貪婪的和懶惰的“+” #原意想得到'http://www.'的匹配結果,但是得到了'http://www.baidu.',這表明了+的貪婪,盡可能多的匹配,通過加上一個?,變成了懶惰的 text7 = r"http://www.baidu.com/" p7 = r"http.+\." pat7 = re.compile(p7) print("7:", pat7.findall(text7)) p8 = r"http.+?\." pat8 = re.compile(p8) print("8:", pat8.findall(text7)) #精准控制匹配次數{a,b},匹配次數大於等於a,小於等於b text9 = r"python pyython pyyython pyyyython pyyyyython" p9 = r"py{1,2}thon" pat9 = re.compile(p9) print("9:", pat9.findall(text9)) p10 = r"py{4,5}thon" pat10 = re.compile(p10) print("10:", pat10.findall(text9))