python的正则表达式对象的使用也是很方便的,特别是提供了许多内置便捷的匹配方法。
#!/user/bin/env python
#coding:utf-8
print '正则表达式'
import re
#创建一个规则对象,默认非贪心,re.I为忽略大小写
pattern = re.compile(r'python',re.I)
#match方法:从字符串开始,如果匹配字符满足规则,则返回匹配对象,注意是“匹配对象”,而不是直接匹配的字符串
print re.match(pattern,'1python')#必需从第一个开始满足
print re.match(pattern, 'python1')
print re.match(pattern, 'Python')
#或者
print pattern.match('Python'),'other method'
print '=============================================='
string = 'App is app'
#match方法:返回匹配对象
#下面的规则中包含了多个子规则,使用I和M模式,如果传入的是匹配对象并设置了该参数,可以不设置
matching = re.match('(.*) is (.*)',string,re.I|re.M)
print matching.group()#得到所有满足规则的字符串元组
print matching.group(1)#得到满足规则元组中的第一个字符串
print matching.start()#截获起始位置
print matching.end()#截获结束位置
print matching.span()#得到匹配截获的部分所在字符串的下标区间
print matching.groups()#匹配的元组
print matching.pos
print matching.endpos
print matching.lastindex
print matching.lastgroup
print matching.groupdict()
print '=============================================='
#search方法:和match类似,但是不一定要从一开始匹配,而是搜索整个字符串
string = 'yes I like better'
searching = re.search('I like better', string, re.I|re.M)
print searching.group()
string = 'good,good,good'
#split方法:切割匹配的字符串,以匹配的字符为切割点,0为最大切割次数,该方法返回list
print re.split('good', string, 2)
#findall方法:和search类似,但是会返回所有匹配的字符串,该方法返回list
print re.findall('good', string)
#finditer方法:迭代匹配返回
for sub in re.finditer('good', string):
print sub.group(),
#sub方法:匹配并替换,0为替换所有,替换的参数可以是方法,但必需是一个参数且参数为match对象而方法,替换的参数也可以转义为分组名
print re.sub('good', 'better', string, 0)
输出:
正则表达式
None
<_sre.SRE_Match object at 0x0000000005794718>
<_sre.SRE_Match object at 0x0000000005794718>
<_sre.SRE_Match object at 0x0000000005794718> other method
==============================================
App is app
App
0
10
(0, 10)
('App', 'app')
0
10
2
None
{}
==============================================
I like better
['', ',', ',good']
['good', 'good', 'good']
good good good better,better,better