正则表达式
#导入模块
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))