0
点赞
收藏
分享

微信扫一扫

Pytho正则表达式-match


代码:

#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"



以上实例执行结果如下:

matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter



主要解释下  r'(.*) are (.*?) .*'

首先,这是一个字符串,前面的一个r表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符。但是这个字符串里没有反斜杠,所以这个r可有可无。

  1. (.*) 第一个匹配分组,   .*  代表匹配除换行符之外的所有字符,即任意字符即可
  2. (.*?)第二个匹配分组,.*?后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符
  3. 后面的一个.*  没有括号包围,所以不是分组,匹配效果和第一个一样,但是不计入匹配结果中,只有加括号的才会返回到匹配结果中

matchObj.group() 等同于 matchObj.group(0),表示匹配到的完整文本字符

matchObj.group(1) 得到第一组匹配结果,也就是(.*)匹配到的

matchObj.group(2) 得到第二组匹配结果,也就是(.*?)匹配到的

matchObj.group(3)会报错,因为只有匹配结果中只有两组,所以填3时会报错。

下面是修改后的代码  ,一看便懂

#!/usr/bin/python
import re

line = "Cats are smarter than dogs hahaha"
matchObj = re.match(r'(.*) are (.*?) than (.*) ha', line, re.M | re.I)
if matchObj:
    print "matchObj.group() : ", matchObj.group()
    print "matchObj.group(1) : ", matchObj.group(1)
    print "matchObj.group(2) : ", matchObj.group(2)
    print "matchObj.group(3) : ", matchObj.group(3)
else:
    print "No match!!"



结果:

D:\python\python.exe D:/pycharm/workspace/test01.py
 matchObj.group() :  Cats are smarter than dogs ha
 matchObj.group(1) :  Cats
 matchObj.group(2) :  smarter
 matchObj.group(3) :  dogs



举报

相关推荐

0 条评论