python re模块

一、re模块匹配时贪婪和非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在”*”,”?”,”+”,”{m,n}”后面加上?,使贪婪变成非贪婪。

即:
.*具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。
.*?则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。

例子如下:

>>> s="This is a number 234-235-22"

>>> r=re.match(".+(\d+-\d+-\d+)",s)
>>> r.group(1)
'4-235-22'

>>> r=re.match(".+?(\d+-\d+-\d+)",s)
>>> r.group(1)
'234-235-22'

#此外.group(0)返回原字符串
>>> r.group(0)
'This is a number 234-235-22'

二、re模块的属性和方法

re.compile(pattern[, flags])
把一个正则表达式pattern编译成正则对象,以便可以用正则对象的match和search方法。
得到的正则对象的行为(也就是模式)可以用flags来指定,值可以由几个下面的值OR得到。
以下两段内容在语法上是等效的:

#法1
>>> A = re.compile(pattern)
>>> result = prog.match(string)
#法2
>>> result = re.match(pattern, string)

#例子
>>> s="This is a number 234-235-22"

>>> r=re.match(".+?(\d+-\d+-\d+)",s)
>>> r.group(1)
'234-235-22'

>>> A=re.compile(r".+?(\d+-\d+-\d+)")
>>> r=re.match(A,s)
>>> r.group(1)
'234-235-22'

区别是,用了re.compile以后,正则对象会得到保留,这样在需要多次运用这个正则对象的时候,效率会有较大的提升。

搜索匹配区别

search与match工作方式不同,match()尝试从字符串起始处进行匹配,search()会检查参数字符串任意位置。
eg.
用字符串’foo’去匹配’seafood’,match()会失败,search()会成功。

四种方法比较

1.match
从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。
2.search
若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个。
3.findall
返回string中所有与pattern相匹配的全部字串,返回形式为数组。
4.finditer
返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。

详细见:
http://blog.csdn.net/djskl/article/details/44357389

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值