import re # re模块,结果存成列表
print(re.findall('\w','ab 12\+- *&_')) #\w匹配字母数字及下划线
\w
print(re.findall('\W','ab 12\+- *&_')) #\W匹配非字母数字下划线
print(re.findall('\s','ab \r1\n2\t\+- *&_')) #\s匹配任意空白字符,包括[\t\n\r\f]
print(re.findall('\S','ab \r1\n2\t\+- *&_')) #\S匹配任意非空字符
print(re.findall('\d','ab \r1\n2\t\+- *&_')) #\d匹配任意数字,等价于[0-9]
\d
print(re.findall('\D','ab \r1\n2\t\+- *&_')) #\D匹配任意非数字
print(re.findall('\w_sb','egon alex_sb123123wxx_sb,lxx_sb'))#结果:['x_sb','x_sb','x_sb']
\w_sb
print(re.findall('\Aalex','abcalex is salexb')) #\Aalex即查看字符串最开始的四个字符是不是alex.结果为:[]
print(re.findall('\Aalex','alex is salexb')) # 结果为:['alex']
print(re.findall('^alex','alex is salexb')) # 匹配字符串开头
print(re.findall('sb\Z','alexsb is sbalexbsb')) #匹配字符串末尾处,如果存在换行,只匹配到换行前的结束字符串
print(re.findall('sb\z','alexsb is sbalexbsb')) #匹配字符串末尾处
print(re.findall('sb$','alexsb is sbalexbsb')) #匹配字符串末尾处
sb
print(re.findall('^ebn$','ebn1')) #结果:[]
ebn
print(re.findall('a\nc','a\nc a\tc a1c'))
print(re.findall('a\\\\c','a\c anc abb cbv a\nc'))
print(re.findall(r'a\\c','a\c anc abb cbv a\nc'))
重复匹配:
. ? * + {m,n} .* .*? # * ? + 这三个必须与其他字符连用
1、.:代表除了换行符外的任意一个字符
print(re.findall('a.c','abc a1c aAc aaaaaca\nc'))
a.c
print(re.findall('a.c','abc a1c aAc aaaaaca\nc',re.DOTALL)) # 点可以是所有的类型
2、?:代表左边第一个字符重复0个或1个 # 取出来是 a或 ab
print(re.findall('ab?','a ab abb abbb abbbb abbbb'))
ab?
3、*:代表左边第一个字符出现0个或任意个
print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb')) #a必须有,b则必须紧接着a出现零个或任意多个
ab*
4、+ :代表左边第一个字符出现1个或任意个 # 最少为ab
print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))
ab+
5、{m,n}:代表左边第一个字符出现m个到n个 # 可以取代上面三种形式
print(re.findall('ab?','a ab abb abbb abbbb abbbb'))
print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbb'))
print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab{0,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab{1,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab{1,3}','a ab abb abbb abbbb abbbb a1bbbbbbb'))
6、.*:匹配任意长度,任意的字符=====》贪婪匹配
print(re.findall('a.*c', 'ac a123c aaaac a *123)()c asdfasfdsadf')) # 结果:['ac a123c aaaac a *123)()c'] #一个字符串
a.*c
7、.*?:非贪婪匹配
print(re.findall('a.*?c', 'a123c456c')) # 结果:['a123c']
print(re.findall('a.*?c', 'ac a123c aaaac a *123)()c asdfasfdsadf'))# 结果:['ac', 'a123c', 'aaaac', 'a *123)()c']
():分组
print(re.findall('(alex)_sb','alex_sb asdfsafdafdaalex_sb'))
(alex)_sb #会按alex_sb匹配,但最后打印出的为括号内的alex
print(re.findall(
'href="(.*?)"',
'<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>'))
<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
href=".*?"
[]:匹配一个指定范围内的字符(这一个字符来自于括号内定义的)
print(re.findall('a[0-9][0-9]c','a1c a+c a2c a9c a11c a-c acc aAc'))
当 - 需要被当中普通符号(减号)匹配时,只能放到[]的最左边或最右边.或者加转译符\将其变为普通字符的意义(否则就是左对齐的意思)
print(re.findall('a[+*-]c','a1c a+c a2c a9c a*c a11c a-c acc aAc'))
print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc')) #a、c之间加一个字符(a-Z)
[]内的^代表取反(非)的意思
print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))
print(re.findall('a[^0-9]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))
print(re.findall('([a-z]+)_sb','egon alex_sb123123wxxxxxxxxxxxxx_sb,lxx_sb')) #>>['alex', 'wxxxxxxxxxxxxx', 'lxx']
[a-z]+_sb
| :或者
print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next one is my company'))
(?:) :代表取匹配成功的所有内容,而不仅仅只是括号内的内容
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))
print(re.findall('alex|sb','alex sb sadfsadfasdfegon alex sb egon'))
re模块的其他方法:
print(re.findall('alex|sb','123123 alex sb sadfsadfasdfegon alex sb egon'))
print(re.search('alex|sb','123213 alex sb sadfsadfasdfegon alex sb egon').group())
只要找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None
print(re.search('^alex','123213 alex sb sadfsadfasdfegon alex sb egon'))
^alex表示看字符串最开头的四个是否是alex
print(re.search('^alex','alex sb sadfsadfasdfegon alex sb egon').group())
search+^等同于match:
print(re.match('alex','alex sb sadfsadfasdfegon alex sb egon').group())
print(re.match('alex','123213 alex sb sadfsadfasdfegon alex sb egon'))
info='a:b:c:d'
print(info.split(':'))
print(re.split(':',info))
info=r'get :a.txt\3333/rwx'
print(re.split('[ :\\\\/]',info))
print('egon is beutifull egon'.replace('egon','EGON',1)) # 1表示替换一个
print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'\1\2\3EGON\5','123 egon is beutifull egon 123'))
r'\1\2\3EGON\5'即去掉括号1括号2,3和括号5的内容,将括号4内的替换为EGON
(123 )(egon)( is beutifull )(egon)( 123)
print(re.sub('(lqz)(.*?)(SB)',r'\3\2\1',r'lqz is SB'))
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'lqzzzz123+ is SB'))
(lqzzzz)(123+ )(is)( )(SB)
pattern=re.compile('alex') #将re表达式存储起来,方便以后重复使用
print(pattern.findall('alex is alex alex'))
print(pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex'))
print(re.findall('\w','ab 12\+- *&_')) #\w匹配字母数字及下划线
\w
print(re.findall('\W','ab 12\+- *&_')) #\W匹配非字母数字下划线
print(re.findall('\s','ab \r1\n2\t\+- *&_')) #\s匹配任意空白字符,包括[\t\n\r\f]
print(re.findall('\S','ab \r1\n2\t\+- *&_')) #\S匹配任意非空字符
print(re.findall('\d','ab \r1\n2\t\+- *&_')) #\d匹配任意数字,等价于[0-9]
\d
print(re.findall('\D','ab \r1\n2\t\+- *&_')) #\D匹配任意非数字
print(re.findall('\w_sb','egon alex_sb123123wxx_sb,lxx_sb'))#结果:['x_sb','x_sb','x_sb']
\w_sb
print(re.findall('\Aalex','abcalex is salexb')) #\Aalex即查看字符串最开始的四个字符是不是alex.结果为:[]
print(re.findall('\Aalex','alex is salexb')) # 结果为:['alex']
print(re.findall('^alex','alex is salexb')) # 匹配字符串开头
print(re.findall('sb\Z','alexsb is sbalexbsb')) #匹配字符串末尾处,如果存在换行,只匹配到换行前的结束字符串
print(re.findall('sb\z','alexsb is sbalexbsb')) #匹配字符串末尾处
print(re.findall('sb$','alexsb is sbalexbsb')) #匹配字符串末尾处
sb
print(re.findall('^ebn$','ebn1')) #结果:[]
ebn
print(re.findall('a\nc','a\nc a\tc a1c'))
print(re.findall('a\\\\c','a\c anc abb cbv a\nc'))
print(re.findall(r'a\\c','a\c anc abb cbv a\nc'))
重复匹配:
. ? * + {m,n} .* .*? # * ? + 这三个必须与其他字符连用
1、.:代表除了换行符外的任意一个字符
print(re.findall('a.c','abc a1c aAc aaaaaca\nc'))
a.c
print(re.findall('a.c','abc a1c aAc aaaaaca\nc',re.DOTALL)) # 点可以是所有的类型
2、?:代表左边第一个字符重复0个或1个 # 取出来是 a或 ab
print(re.findall('ab?','a ab abb abbb abbbb abbbb'))
ab?
3、*:代表左边第一个字符出现0个或任意个
print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb')) #a必须有,b则必须紧接着a出现零个或任意多个
ab*
4、+ :代表左边第一个字符出现1个或任意个 # 最少为ab
print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))
ab+
5、{m,n}:代表左边第一个字符出现m个到n个 # 可以取代上面三种形式
print(re.findall('ab?','a ab abb abbb abbbb abbbb'))
print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbb'))
print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab{0,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab{1,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))
print(re.findall('ab{1,3}','a ab abb abbb abbbb abbbb a1bbbbbbb'))
6、.*:匹配任意长度,任意的字符=====》贪婪匹配
print(re.findall('a.*c', 'ac a123c aaaac a *123)()c asdfasfdsadf')) # 结果:['ac a123c aaaac a *123)()c'] #一个字符串
a.*c
7、.*?:非贪婪匹配
print(re.findall('a.*?c', 'a123c456c')) # 结果:['a123c']
print(re.findall('a.*?c', 'ac a123c aaaac a *123)()c asdfasfdsadf'))# 结果:['ac', 'a123c', 'aaaac', 'a *123)()c']
():分组
print(re.findall('(alex)_sb','alex_sb asdfsafdafdaalex_sb'))
(alex)_sb #会按alex_sb匹配,但最后打印出的为括号内的alex
print(re.findall(
'href="(.*?)"',
'<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>'))
<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
href=".*?"
[]:匹配一个指定范围内的字符(这一个字符来自于括号内定义的)
print(re.findall('a[0-9][0-9]c','a1c a+c a2c a9c a11c a-c acc aAc'))
当 - 需要被当中普通符号(减号)匹配时,只能放到[]的最左边或最右边.或者加转译符\将其变为普通字符的意义(否则就是左对齐的意思)
print(re.findall('a[+*-]c','a1c a+c a2c a9c a*c a11c a-c acc aAc'))
print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc')) #a、c之间加一个字符(a-Z)
[]内的^代表取反(非)的意思
print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))
print(re.findall('a[^0-9]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))
print(re.findall('([a-z]+)_sb','egon alex_sb123123wxxxxxxxxxxxxx_sb,lxx_sb')) #>>['alex', 'wxxxxxxxxxxxxx', 'lxx']
[a-z]+_sb
| :或者
print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next one is my company'))
(?:) :代表取匹配成功的所有内容,而不仅仅只是括号内的内容
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))
print(re.findall('alex|sb','alex sb sadfsadfasdfegon alex sb egon'))
re模块的其他方法:
print(re.findall('alex|sb','123123 alex sb sadfsadfasdfegon alex sb egon'))
print(re.search('alex|sb','123213 alex sb sadfsadfasdfegon alex sb egon').group())
只要找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None
print(re.search('^alex','123213 alex sb sadfsadfasdfegon alex sb egon'))
^alex表示看字符串最开头的四个是否是alex
print(re.search('^alex','alex sb sadfsadfasdfegon alex sb egon').group())
search+^等同于match:
print(re.match('alex','alex sb sadfsadfasdfegon alex sb egon').group())
print(re.match('alex','123213 alex sb sadfsadfasdfegon alex sb egon'))
info='a:b:c:d'
print(info.split(':'))
print(re.split(':',info))
info=r'get :a.txt\3333/rwx'
print(re.split('[ :\\\\/]',info))
print('egon is beutifull egon'.replace('egon','EGON',1)) # 1表示替换一个
print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'\1\2\3EGON\5','123 egon is beutifull egon 123'))
r'\1\2\3EGON\5'即去掉括号1括号2,3和括号5的内容,将括号4内的替换为EGON
(123 )(egon)( is beutifull )(egon)( 123)
print(re.sub('(lqz)(.*?)(SB)',r'\3\2\1',r'lqz is SB'))
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'lqzzzz123+ is SB'))
(lqzzzz)(123+ )(is)( )(SB)
pattern=re.compile('alex') #将re表达式存储起来,方便以后重复使用
print(pattern.findall('alex is alex alex'))
print(pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex'))