Hit9 Blog Wiki Project Links Archives Resumé
Page: First UP Pre Next Back

python正则表达式

Fork me on GitHub

允许转载, 但转载请注明出处

最后更新时间:2012-08-28

注:本wiki不涉及正则知识

1.编译正则表达式

正则表达式被编译成 RegexObject 实例,可以为不同的操作提供方法

compile(pattern, flags=0)

编译正则表达式,返回一个RegexObject.

其中:flags是编译时用的匹配模式.

code sample:

import re
print re.compile(r'^hello')

2.匹配字符串

1.match(从字符串首开始匹配)

从字符串首开始进行匹配,匹配成功则返回一个match对象(MatchObject),否则返回None

match(pattern, string, flags=0)

使用编译了的pattern object:

import re
p=re.compile(r'^hello')
if p.match('hello world'):
    print 1
else:
    print 0

还可以这样:(python会把pattern编译成pattern对象再进行匹配,实质与上一种code一样)

import re
if re.match('^hello','hello world'):
    print 1
else:
    print 0

2.search(扫描整个字符串查找第一个匹配的)

search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):

search() 将扫描整个字符串,并报告它找到的第一个匹配(返回MatchObject).找不到则返回None

code sample:

import re
p=re.search('abc','abcedfabcef')
if p:
    print p.group()
else:
    print 0

3.findall(查找所有子串并返回匹配的结果列表)

原型:

findall(pattern, string, flags=0)

sample code:

import re
print re.findall('\d','abcd1240sa')#['1','2','4','0']

4.finditer(匹配所有子串,并把它们作为一个迭代器返回)

原型:

finditer(pattern, string, flags=0)

返回一个match对象

sample code:

import re
for i in re.finditer('\d+','12hello23world45'):
    print i.span()

5.MatchObject的方法

  1. group(),返回匹配的字符串
  2. start(),返回开始匹配的位置
  3. end(),返回匹配结束的位置
  4. span(),返回(开始,结束)即(start,end)元组

3.字符串替换

假如我们不用正则:

print "hello".replace('l','+')

如果我们使用正则做替换,比如下面的:

#--coding:utf-8--
import re
p=r'_(.+?)_'
pc=re.compile(p)
print pc.sub(r'<em>\1</em>',"_hello_enas_world_")

用到了sub函数:

sub(replacement, string[, count = 0])

找到所有模式匹配的字符串并用不同的字符串来替换它们.找到了返回替换后结果,否则返回原结果

注,这里使用的是原始字符串(去掉了反斜线转义机制)


Support:mkdwiki