python正则表达式

来源:互联网 发布:什么是云计算的基础 编辑:程序博客网 时间:2024/06/14 03:01

模块:re

import re


方法主要有:

p=re.compile(r"abc")      返回pattern对象

p.match("str")    返回str中符合该pattern对象的字符串

#p.search("str")   返回str中符合该pattern对象的字符串

#p.findall("str")   返回list对象

#p.finditer("str")  返回迭代器对象

区别:

match方法必须要求从str开头匹配成功

search方法只要在str中匹配成功就返回第一个匹配成功的字符串

findall返回所有匹配成功的字符串,返回对象为list

finditer与findall类似,只不过是用next()方法访问内容

match、search方法都需要group()方法打印输出或者用span方法打印位置,例如(0,3)


也可直接使用re.match(pattern,string, flags=0)、re.search(pattern,string, flags=0)直接匹配字符串


匹配失败会返回None



贪婪模式和非贪婪模式:

例子:

>>> p=re.compile('[abc]{2,3}')
>>> print p.findall('abcabc')
['abc', 'abc']
>>> p=re.compile('[abc]{2,3}?')
>>> print p.findall('abcabc')
['ab', 'ca', 'bc']

例中问号就是切换为非贪婪模式,默认为贪婪模式

数量词(*、+、{2}、{2,3})这些后面加问号就是切换非贪婪模式



替换:

re.sub(pattern, repl,string, count=0, flags=0)

参数:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。


匿名分组(group方法):

>>> import re
>>> p=re.compile('abc')
>>> p=re.compile('(a)b(c)')
>>> m=p.match('abcdef')
>>> m.groups()
('a', 'c')

>>> m.groupdict()
{}

命名分组(groupdict方法):

>>> p=re.compile('(?P<name>a)b(c)')
>>> m=p.match('abcdef')
>>> m.groups()
('a', 'c')
>>> m.groupdict()
{'name': 'a'}

>>> p=re.compile('(?P<name>a)b(?P<age>c)')

>>> m=p.match('abcdef')

>>> m.groupdict('age')
{'age': 'c', 'name': 'a'}

>>> (m.groupdict())['age']
'c'
>>> (m.groupdict())['name']
'a'


>>> p=re.compile(r'(?P<name>a)b(c)(?P=name)')       #红色处为引用前边定义的(?P<name>a),相当于(a)b(c)a
>>> p.match('abcac').group()
'abca'
>>> p.findall()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Required argument 'string' (pos 1) not found
>>> p.findall('abcac')
[('a', 'c')]


>>> p=re.compile(r'(a)b(c)\2')                 # \2指的是引用第二个分组,相当于(a)b(c)c
>>> p.match('abcc')
<_sre.SRE_Match object at 0x0000000003B258B0>
>>> p.match('abcc').group()
'abcc'
>>> p.match('abcc').groupdict()
{}

>>> p.findall('abcc')
[('a', 'c')]



分隔符拆分字符串(类似于unix下的awk -F):

>>> p=re.compile('-')
>>> p.split('a-bb-ccc-dddd-eeeee')              #返回list对象
['a', 'bb', 'ccc', 'dddd', 'eeeee']

原创粉丝点击