#第一例: import re str1 = 'ditqq dot det,dct dit dot' print(re.findall('dit',str1)) print(re.match('dit',str1).group()) print(re.match('dit',str1))
''' 这说明:findall()匹配出来所有符合要求的字符串,并返回一个列表 match().group只匹配符合要求的第一个字符串,返回的是一个字符串 不加.group的话,返回第一个匹配的字符串和位置 ['dit', 'dit'] dit <_sre.SRE_Match object; span=(0, 3), match='dit'> '''
#第二例:import restr1 = 'dit dot det,dct ditmm dot'print(re.findall('dit|dct|det',str1))print(re.match('det|dit|dct',str1))'''['dit', 'det', 'dct', 'dit']<_sre.SRE_Match object; span=(0, 3), match='dit'>'''
#第三例:#[]表示字符集,这个和'dit|dot|dct'是等价的import restr1 = 'dit dot det,dct dit dot'print(re.findall('d[ioc]t',str1))print(re.match('d[ioc]t',str1))'''['dit', 'dot', 'dct', 'dit', 'dot']<_sre.SRE_Match object; span=(0, 3), match='dit'>'''
#第四例:#^符号表示“排除”import restr1 = 'dit dot det,dct dit dot'print(re.findall('d[^ic]t',str1))print(re.match('d[^ic]t',str1))print(re.match('d[i]t',str1))print(re.match('d[o]t',str1))'''.match()必须是从字符串的开头进行匹配['dot', 'det', 'dot']None<_sre.SRE_Match object; span=(0, 3), match='dit'>None'''
#第五例 ^还可以标识以...开头import restr1 = 'dit dot det,dct dit dot'print(re.findall('^dit',str1))print(re.findall('^dct',str1))print(re.match('^dot',str1))print(re.match('^dit',str1))'''['dit'][]None<_sre.SRE_Match object; span=(0, 3), match='dit'>'''
#第六例:import restr1 = 'dit dot det,dct dit dot'print(re.findall('dot$',str1))print(re.findall('dct$',str1))print(re.match('dot$',str1)) #只能是开头匹配,无法指定末尾匹配'''['dot'][]None'''
#第七例:# d.t表示d与t之间省略了任意一个字符:# *表示至少零个# +表示至少一个import restr1 ='dict ### dot det,,,,dct dit dot'print(re.findall('d.t',str1))print(re.findall('d.*t',str1))print(re.findall('d.+t',str1))'''['dot', 'det', 'dct', 'dit', 'dot']['dict ### dot det,,,,dct dit dot']['dict ### dot det,,,,dct dit dot']'''
#第八例:# *表示匹配0个或多个# +表示匹配1个或多个import restr1 = 'd dt dit diit det'print(re.findall('d.+t',str1))print(re.findall('d.*t',str1))print(re.match('d.*t',str1))'''['d dt dit diit det']['d dt dit diit det']<_sre.SRE_Match object; span=(0, 17), match='d dt dit diit det'>'''
#第九例:# *表示匹配0个或者一个# +表示匹配0个或者一个# .findall()函数从任意位置处开始匹配# .match()函数从开头处开始匹配import restr1 = 'cd dt dit diit det'print(re.findall('d.+t',str1))print(re.findall('d.*t',str1))print(re.match('d.*t',str1))'''['d dt dit diit det'] ['d dt dit diit det']None'''
#第十例:#贪婪匹配#?作用一:看.+的匹配结果,'dit'、'dot'也满足'd.+t'的匹配条件,而输出的# 却是满足匹配条件的最长子串'dit dot det,dct dit dot',这个叫贪婪匹配。如# 果要输出最短的匹配字串,只需在'+'后面加上'?':(注:对于'*'也是一样,只# 需在'*'后面加上'?')import restr1 = 'd dt dit diit det'print(re.findall('d.+t',str1)) #贪婪模式print(re.findall('d.+?t',str1)) #加问号变成非贪婪模式print(re.findall('d.*?t',str1)) #非贪婪模式print(re.match('d.*t',str1))print(re.match('d.*?t',str1)) #非贪婪模式'''贪婪模式就是一口吃个胖子,非贪婪模式就是细嚼慢咽['d dt dit diit det']['d dt', 'dit', 'diit', 'det']['d dt', 'dit', 'diit', 'det']<_sre.SRE_Match object; span=(0, 17), match='d dt dit diit det'><_sre.SRE_Match object; span=(0, 4), match='d dt'>'''
#第十一例:# ?作用二:di?t表示i可有可无,即dt、dit都满足匹配条件:import restr1 = 'dt dt dit diit det'print(re.findall('dii?t',str1))print(re.match('di?t',str1))'''['dit', 'diit']<_sre.SRE_Match object; span=(0, 2), match='dt'>'''
#第十二例:# {}作用一:di{n}t表示d和t之间有n个'i':import restr1 = 'dt dit diit diiit diiiit'print(re.findall('di{2}t',str1))'''['diit']'''
#第十三例:# {}作用二:di{n,m}t表示d和t之间有n到m个'i'import restr1 = 'dt dit diit diiit diiiit'print(re.findall('di{1,3}t',str1))'''['dit', 'diit', 'diiit']'''
#第十四例:# 其中,n和m都是可以省略的。{n,}表示n个到任意个;{,m}表示0个到m个;# {,}表示任意个,和'*'功能一样:import restr1 = 'dt dit diit diiit diiiit'print(re.findall('di{1,}t',str1))print(re.findall('di{,3}t',str1))print(re.findall('di{,}t',str1))'''['dit', 'diit', 'diiit', 'diiiit']['dt', 'dit', 'diit', 'diiit']['dt', 'dit', 'diit', 'diiit', 'diiiit']'''
#第15例:# \作用一:取消元字符,变成普通字符:import restr1 = '^abc ^abc'print(re.findall('^abc',str1))print(re.findall('\^abc',str1))'''[]['^abc', '^abc']'''
#第16例:# \作用二:跟普通字符放在一起,让普通字符变成转义字符:import restr1 = '12 abc 345 efgh'print(re.findall('\d+',str1))print(re.match('\d+',str1))print(re.findall('\w+',str1))'''['12', '345']<_sre.SRE_Match object; span=(0, 2), match='12'>['12', 'abc', '345', 'efgh']'''
#第17例:# ()作用:在匹配字符串后,只输出匹配字串'()'里面的内容:import restr1 = '12abcd34'print(re.findall('12abcd34',str1))print (re.findall('1(2a)bcd34',str1))print (re.findall('1(2a)bc(d3)4',str1))'''['12abcd34']['2a'][('2a', 'd3')]'''
#第18例:# re模块里的主要方法:findall()、finditer()、match()、search()、compile()、# split()、sub()、subn()。# re.findall(pattern,string,flags = 0)作用:在string中从左往右搜索与# pattern(有样品的意思)匹配的字串,结果以list形式返回。import restr1 = 'ab _ + # 321_cd'print(re.findall('\w+',str1))'''['ab', '_', '321_cd']'''
#第19例:# re.compile(pattern,flags = 0)# 作用:对匹配格式pattern进行编译,返回一个实例对象。对正则表达式先编译,# 可以大幅提高匹配速度。import restr1 = 'ab cd'pre = re.compile('ab')print(pre.findall(str1))'''本例重要!['ab']'''
#第20例:# re.split(pattern,string,maxsplit = 0,flags = 0)# 作用:在string匹配pattern的时候做分割:import restr1 = 'ab.c.de'str2 = '12+34-56*78/90'print(re.split('\.',str1))print(re.split('[\+\-\*/]',str2))print(str1.split('.'))print(str2.split('+'))'''['ab', 'c', 'de']['12', '34', '56', '78', '90']['ab', 'c', 'de']['12', '34-56*78/90']'''
#第21例:# re.search(pattern,string,flags = 0)# 作用:在string中从左往右搜索与pattern匹配的字串,无匹配结果则返回None,# 否则返回一个search实例。import restr1 = 'ab cd'result = re.search('cd',str1)if result == None: print('None')else: print(result.group(),result.start(),result.end())'''cd 3 5'''
#第22例:# re.subn(pattern,repl,string,count = 0,flags = 0)# 作用:其功能与re.sub()相同,但返回的结果多了一个数字,代表替换了多少次import restr1 = 'abc de bce'print(re.subn('bc','123',str1))'''('a123 de 123e', 2)'''
''' 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 '''
* 重复零次或多次 + 重复一次或多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次到多次 {,m} 重复0次到m次 {n,m} 重复n到m次
\W 匹配任意不是字母,数字,下划线,汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数字的字符 \B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符