比较详细Python正则表达式操作指南(re使用)[3]

本文介绍了如何使用Python的正则表达式模块进行字符串匹配,包括基本的match()和search()方法,以及MatchObject的各种属性和方法。此外还探讨了findall()和finditer()方法的应用。
摘要由CSDN通过智能技术生成

现在,你可以试着用 RE 的 [a-z]+ 去匹配不同的字符串。一个空字符串将根本不能匹配,因为 + 的意思是 “一个或更多的重复次数”。在这种情况下 match() 将返回 None,因为它使解释器没有输出。你可以明确地打印出 match() 的结果来弄清这一点。

#!python

>>> p.match("" )

>>> print p.match(""
)

None

现在,让我们试着用它来匹配一个字符串,如 "tempo"。这时,match() 将返回一个 MatchObject。因此你可以将结果保存在变量里以便后面使用。

#!python

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

>>> print
  m

<_sre.SRE_Match object at 80c4f68>

现在你可以查询 `MatchObject` 关于匹配字符串的相关信息了。MatchObject 实例也有几个方法和属性;最重要的那些如下所示:

 

方法/属性作用
group()返回被 RE 匹配的字符串
start()返回匹配开始的位置
end()返回匹配结束的位置
span()返回一个元组包含匹配 (开始,结束) 的位置

 


试试这些方法不久就会清楚它们的作用了:

#!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() 方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值