正则表达式

编译正则表达式

正则表达式被编译成 RegexObject 实例,可以为不同的操作提供方法,如模式匹配搜索或字符串替换。

#!python

import re
p = re.compile(‘ab*’)
print p
<_sre.SRE_Pattern object at 0xb76e1a70>
re.compile() 也接受可选的标志参数,常用来实现不同的特殊功能和语法变更。我们稍后将查看所有可用的设置,但现在只举一个例子:

#!python

p = re.compile(‘ab*’, re.IGNORECASE)
RE 被做为一个字符串发送给 re.compile()。REs 被处理成字符串是因为正则表达式不是 Python 语言的核心部分,也没有为它创建特定的语法。(应用程序根本就不需要 REs,因此没必要包含它们去使语言说明变得臃肿不堪。)而 re 模块则只是以一个 C 扩展模块的形式来被 Python 包含,就象 socket 或 zlib 模块一样

一些正则表达式的应用

#!python

m.group()
‘tempo’

m.start(), m.end()
(0, 5)

m.span()
(0, 5)
group() 返回 RE 匹配的子串。start() 和 end() 返回匹配开始和结束时的索引。span() 则用单个元组把开始和结束时的索引一起返回。因为匹配方法检查到如果 RE 在字符串开始处开始匹配,那么 start() 将总是为零。然而, RegexObject 实例的 search 方法扫描下面的字符串的话,在这种情况下,匹配开始的位置就也许不是零了。

#!python

print p.match(’::: message’)
None

m = p.search(’::: message’) ; print m
<re.MatchObject instance at 80c9650>

m.group()
‘message’

m.span()
(4, 11)
在实际程序中,最常见的作法是将 MatchObject 保存在一个变量里,然後检查它是否为 None,通常如下所示:

#!python
p = re.compile( … )
m = p.match( ‘string goes here’ )
if m:
print 'Match found: ', m.group()
else:
print ‘No match’
两个 RegexObject 方法返回所有匹配模式的子串。findall()返回一个匹配字符串行表:

#!python

p = re.compile(’\d+’)
p.findall(‘12 drummers drumming, 11 pipers piping, 10 lords a-leaping’)
[‘12’, ‘11’, ‘10’]
findall() 在它返回结果时不得不创建一个列表。在 Python 2.2中,也可以用 finditer() 方法。

#!python

iterator = p.finditer(‘12 drummers drumming, 11 … 10 …’)
iterator
<callable-iterator object at 0x401833ac>

for match in iterator:
… print match.span()

(0, 2)
(22, 24)
(29, 31)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值