python正则表达式re模块详细介绍

2019-10-06 15:42:42刘景俊

例子:

>>> re.sub('-(d+)-', '-g<1>0g<0>', 'a-11-b-22-c')
'a-110-11-b-220-22-c'

re.subn(pattern, repl, string[, count])

跟上面的sub()函数一样,只是它返回的是一个元组 (新字符串, 匹配到的次数)
,还是用例子说话:

>>> re.subn('-(d+)-', '-g<1>0g<0>', 'a-11-b-22-c')
('a-110-11-b-220-22-c', 2)

re.escape(string)

把string中,除了字母和数字以外的字符,都加上反斜杆。

>>> print re.escape('abc123_@#$')
abc123_@#$

exception re.error

如果字符串不能被成功编译成正则表达式或者正则表达式在匹配过程中出错了,都会抛出此异常。但是如果正则表达式没有匹配到任何文本,是不会抛出这个异常的。

正则对象

正则对象由re.compile()返回。它有如下的属性和方法。

match(string[, pos[, endpos]])

作用和模块的match()函数类似,区别就是后面两个参数。
pos是开始搜索的位置,默认为0。endpos是搜索的结束位置,如果endpos比pos还小的话,结果肯定是空的。也就是说只有pos 到 endpos-1 位置的字符串将会被搜索。
例子:

>>> pattern = re.compile("o")
>>> pattern.match("dog")      # 开始位置不是o,所以不匹配
>>> pattern.match("dog", 1)   # 第二个字符是o,所以匹配
<_sre.SRE_Match object at ...>
search(string[, pos[, endpos]])
作用和模块的search()函数类似,pos和endpos参数和上面的match()函数类似。

split(string[, maxsplit=0])
findall(string[, pos[, endpos]])
finditer(string[, pos[, endpos]])
sub(repl, string[, count=0])
subn(repl, string[, count=0])
这几个函数,都和模块的相应函数一致。

flags
编译本RE时,指定的标志位,如果未指定任何标志位,则为0。

>>> pattern = re.compile("o", re.S|re.U)
>>> pattern.flags
48

groups
RE所含有的组的个数。

groupindex

一个字典,定义了命名组的名字和序号之间的关系。
例子:这个正则有3个组,如果匹配到,第一个叫区号,最后一个叫分机号,中间的那个未命名
>>> pattern = re.compile("(?P<quhao>d+)-(d+)-(?P<fenjihao>d+)")
>>> pattern.groups
3
>>> pattern.groupindex
{'fenjihao': 3, 'quhao': 1}

pattern

建立本RE的原始字符串,相当于源代码了,呵呵。
还是上面这个正则,可以看到,会原样返回:

>>> print pattern.pattern
(?P<quhao>d+)-(d+)-(?P<fenjihao>d+)