python正则表达式的过程大致如下图:
首先,通过re.compile()函数,生成pattern对象,该对象可以多次使用。
然后调用pattern对象的match(string)方法,在string中进行匹配,匹配成功后,返回 一个match对象,
通过调用match对象的group()方法,可以查看匹配到的信息。。。。
下面,我们简单示例一下:
>>> p=re.compile(r'imooc')#生成pattern对象,该对象可以多次使用
>>> p
<_sre.SRE_Pattern object at 0x7f121d1a2418>
>>> type(p)
<type '_sre.SRE_Pattern'>
>>> m=p.match('imoocabc')#生成match对象
>>> m
<_sre.SRE_Match object at 0x7f121d194238>
>>> type(m)
<type '_sre.SRE_Match'>
>>> m.group()#匹配到的子串
'imooc'
>>> m.string #被匹配的字符串
'imoocabc'
>>> m.span() #匹配到的子串在原字符串中的索引位置
(0, 5)
>>> m.re #pattern实例
<_sre.SRE_Pattern object at 0x7f121d1a2418>
>>>
>>> p=re.compile(r'imooc')
>>> m=p.match('IMOOcjfjd')#匹配失败,因为区分大小写
>>> type(m)
<type 'NoneType'>
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> p=re.compile(r'imooc',re.I)#re.I表示忽略(ignore)大小写
>>> p
<_sre.SRE_Pattern object at 0x7f121d1b71f8>
>>> type(p)
<type '_sre.SRE_Pattern'>
>>> m=p.match('imoocjdf')
>>> m.group()
'imooc'
>>> m=p.match('IMOOcjdf')
>>> m.group()
'IMOOc'
>>>
>>> p=re.compile(r'(imooc)',re.I)#将imooc放到圆括号中
>>> p
<_sre.SRE_Pattern object at 0x7f121f265f48>
>>> m=p.match('iMOOCidf')
>>> m
<_sre.SRE_Match object at 0x7f121d1d9198>
>>> m.group()
'iMOOC'
>>> m.groups()#将imooc放到圆括号中,m.groups()会返回一个元组
('iMOOC',)
>>>
上面的示例,我们都是先调用re.compile()方法,生成一个pattern对象,然后再调用该pattern对象的match()方法,这两步可以合并为一步,如下:
>>> m=re.match(r'imooc','imoocjdf')#先生成pattern对象,再生成match对象,缺点:生成的pattern对象只使用了一次!
>>> m
<_sre.SRE_Match object at 0x7f121f2c2ac0>
>>> type(m)
<type '_sre.SRE_Match'>
>>> m.group()
'imooc'
上面是正则表达式的简单使用,现在,我们学习正则表达式的基础语法:
【1】匹配单个字符
1》
.:用来匹配任意一个字符(不包含'\n')
>>> m=re.match(r'.','adg')
>>> m.group()
'a'
>>> m=re.match(r'.','123adg')
>>> m.group()
'1'
>>> m=re.match(r'.','@123adg')
>>> m.group()
'@'
>>> m=re.match(r'.','%@123adg')
>>> m.group()
'%'
>>> m=re.match(r'.','\n%@123adg')# .无法匹配'\n'
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> type(m)
<type 'NoneType'>
>>> m=re.match(r'{.}','{a}\n%@123adg')
>>> m.group()
'{a}'
>>> m=re.match(r'{.}','{8}\n%@123adg')
>>> m.group()
'{8}'
>>> m=re.match(r'{.}','{8ab}\n%@123adg')
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> type(m)
<type 'NoneType'>
>>> m=re.match(r'{...}','{8ab}\n%@123adg'