re模块
imort re
1、\w \W
print(re.findall('\w','ab 12\+- _*&')) #\w 匹配字母 数字 及下划线
执行结果:['a', 'b', '1', '2', '_']
print(re.findall('\W','ab 12\+- _*&')) #\w 匹配非字母 数字 及下划线
执行结果:[' ', '\\', '+', '-', ' ', '*', '&']
2、\s \S
print(re.findall('\s','ab 12\+- _*&')) #\s 匹配任意空白字符,等价于[\t\n\r\f]
执行结果:[' ', ' ']
print(re.findall('\S','ab 12\+- _*&')) #\s 匹配非空白字符
执行结果:['a', 'b', '1', '2', '\\', '+', '-', '_', '*', '&']
3、\d \D
print(re.findall('\d','ab 12\+- _*&')) #\s 匹配任意数字,等价于[0-9]
执行结果:['1', '2']
print(re.findall('\D','ab 12\+- _*&')) #\s 匹配非数字
执行结果:['a', 'b', ' ', '\\', '+', '-', ' ', '_', '*', '&']
综合:
print(re.findall('\w_sb','egon alex_sb12332wxx_sb,lxx_sb'))
执行结果:['x_sb', 'x_sb', 'x_sb']
4、\A 基本上不用
print(re.findall('\Aalex','alex isalex sb'))#从头开始匹配只匹配第一个alex
执行结果:['alex']
print(re.findall('alex','alex isalex sb'))
执行结果:['alex', 'alex']
5、\^
print(re.findall('^alex','alex is salexb'))#从头开始匹配,匹配到第一个则不往后匹配
执行结果:['alex']
print(re.findall('sb','alexsb is sbalexsb'))#从头开始匹配,匹配所有
执行结果:['sb', 'sb', 'sb']
print(re.findall('^sb','alexsb is sbalexsb'))#从头开始匹配,第一个没有则不往后面匹配
执行结果:[]
6、\Z \$
print(re.findall('sb\Z','alexsb is sbalexsb'))#从尾部开始匹配,匹配到则不往前匹配
执行结果:['sb']
print(re.findall('sb$','alexsb is sbalexsb'))#从尾部开始匹配,匹配到则不往前匹配
执行结果:['sb']
综合:
print(re.findall('^ebn$','ebn'))#从头开始找,正反找都是ebn,都可以匹配上
执行结果:['ebn']
7、\n \t (同理)
print(re.findall('\n','a\nc a\tc al\nc'))#匹配到\n
执行结果:['\n', '\n']
print(re.findall('a\nc','a\nc a\tc al\nc'))#匹配到['a\nc']
执行结果:['a\nc']
重复匹配: . ? * + {m,n} .* .*?
1、. :代表除了换行符外的任意一个字符
print(re.findall('a.c','abc alc aAsc aaaaaac'))#匹配以a开头以c结尾.代表中间的任意一个字符
执行结果:['abc', 'alc', 'aac']
print(re.findall('a.c','abc alc aAc aaaaaa\nc'))#ac中间有换行符\n所以匹配不到a\nc
执行结果:['abc', 'alc', 'aAc']
print(re.findall('a.c','abc alc aAsc aaaaaa\nc',re.DOTALL))#.能匹配ac中间的所有一个字符,包括\n
执行结果:['abc', 'alc', 'a\nc']
2、? :代表左边那一个字符重复0次或1次
print(re.findall('ab?','a ab abb abbb abbbb abbbbb albbbbb'))#从头匹配ab中,b是零个或一个
执行结果:['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a']
3、* :代表左边那一个字符出现0次或无穷次
print(re.findall('ab*','a ab abb abbb abbbb abbbbb albbbbbbb'))#从头匹配ab中,b是零个或无穷个
执行结果:['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a']
4、+ :代表左边那一个字符出现至少一次或无穷次
print(re.findall('ab+','a ab abb abbb abbbb abbbbb albbbbbbb'))#从头匹配ab中,b是一个或无穷个
执行结果:['ab', 'abb', 'abbb', 'abbbb', 'abbbbb']
5、{m,n} :代表左边那一个字符出现m次到n次
print(re.findall('ab?','a ab abb abbb abbbb abbbbb albbbbbb')) print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbbb albbbbbb'))
执行结果:['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a'] , ['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a']
print(re.findall('ab*','a ab abb abbb abbbb abbbbb albbbbbbb')) print(re.findall('ab{0,}','a ab abb abbb abbbb abbbbb albbbbbbb'))
执行结果:['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a'] , ['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a']
print(re.findall('ab+','a ab abb abbb abbbb abbbbb albbbbbbb')) print(re.findall('ab{1,}','a ab abb abbb abbbb abbbbb albbbbbbb'))
执行结果:['ab', 'abb', 'abbb', 'abbbb', 'abbbbb'] , ['ab', 'abb', 'abbb', 'abbbb', 'abbbbb']
print(re.findall('ab{1,3}','a ab abb abbb abbbb abbbbb albbbbbbb'))
执行结果:['ab', 'abb', 'abbb', 'abbb', 'abbb']
6、.* :匹配任意长度,任意的字符=====》贪婪匹配
print(re.findall('a.*c','ac a123c aaaac a * 123) ()c asdfsdfkjdls'))#尽可能长的匹配
执行结果:['ac a123c aaaac a * 123) ()c']
7、.*? :非贪婪匹配
print(re.findall('a.*?c','a123c456c'))#尽可能短的匹配
执行结果:['a123c']
8、() :分组
print(re.findall('(alex)_sb','alex_sb sfksdfksdalex_sb'))#在匹配到的情况下只留括号内的内容
执行结果:['alex', 'alex']
例子:非贪婪匹配到网址
print(re.findall('href="(.*?)"','<li><a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/happyfei/">博客园</a></li>'))
执行结果:['https://www.cnblogs.com/happyfei/']
9、[] :匹配一个指定范围内的字符(这一字符来自于括号内定义的)
print(re.findall('a[0-9]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))#-号在[]内有特殊意义,如果要匹配带-号的,-号要放在最前面或最后面
执行结果:['a1c', 'a2c', 'a9c']
print(re.findall('a[-+*]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))
执行结果:['a+c', 'a*c', 'a-c']
print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))
执行结果:['acc', 'aAc']
print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc '))#[]内的^代表取反的意思
执行结果:['a c', 'a1c', 'a+c', 'a2c', 'a9c', 'a*c', 'a-c']
例子:取出_sb
print(re.findall('[a-z]_sb','egon alex_sb12332wxx_sb,lxx_sb'))#[]匹配一个字符后面跟_sb
执行结果:['x_sb', 'x_sb', 'x_sb']
print(re.findall('[a-z]+_sb','egon alex_sb12332wxxxxx_sb,lxx_sb'))#[]+匹配多个字符后面跟_sb
执行结果:['alex_sb', 'wxxxxx_sb', 'lxx_sb']
print(re.findall('([a-z]+)_sb','egon alex_sb12332wxxxxx_sb,lxx_sb'))#只取到_sb的人名
执行结果:['alex', 'wxxxxx', 'lxx']
10、| :代表或者
print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next none is my company'))#取出公司的英文单词
执行结果:['ies', 'y']
注:(?:代表取匹配成功的所有内容,而不仅仅只是括号内的内容)
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next none is my company'))
执行结果:['companies', 'company']
print(re.findall('alex|sb','alex sb ssdfsdf alex sb egon'))
执行结果:['alex', 'sb', 'alex', 'sb']
11、re模块的其他用法
1 print(re.findall('alex|sb','123123 alex sb sdlfjlsdkegon alex sb egon')) 2 print(re.search('alex|sb','123123 alex sb sdlfjlsdkegon alex sb egon').group()) 3 #执行结果:['alex', 'sb', 'alex', 'sb'] , alex 4 5 6 print(re.search('^alex','alex sb sdlfjlsdkegon alex sb egon').group())#表示从头开始匹配 7 print(re.match('alex','alex sb sdlfjlsdkegon alex sb egon').group())#表示从头开始匹配 8 #执行结果:alex , alex 9 10 11 info='a:b:c:d' 12 print(info.split(':')) 13 print(re.split(':',info)) 14 #执行结果:['a', 'b', 'c', 'd'] , ['a', 'b', 'c', 'd'] 15 16 info='a :c\d/e' 17 print(re.split('[ :\\\/]',info)) 18 #执行结果:['a', '', 'c', 'd', 'e'] 19 20 #需求:xxx与Sb调换 21 print(re.sub('(xxx)(.*?)(SB)',r'\3\2\1',r'xxx is SB')) 22 #执行结果:SB is xxx 23 24 print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'\5\2\3\4\1',r'xxx123+ is SB')) 25 #执行结果:SB123+ is xxx 26 27 pattern=re.compile('alex')#把常用的正则表达式式存起来,以后直接用 28 print(pattern.findall('alex is alex sdjflk alexalex')) 29 #执行结果:['alex', 'alex', 'alex', 'alex']
2018-08-18 19:20:32