| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
import re 
  
line = "Cats are smarter than dogs" 
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符 
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串 
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) :  smarte 
 
问题来了,我参照上面这个程序做了点变动,如下所示: 
import re 
li="Cats are smarter than dogs" 
ma=re.match(r'(.*) are (.*?).*',li,re.M|re.I) 
if ma: 
    print(ma.group()) 
    print(ma.group(1)) 
    print(ma.group(2))   
else: 
    print('no match') 
输出结果却是下面这样,不知道为何ma.group(2)输出为空,我百思不得其解。 
 Cats are smarter than dogs 
 Cats 
 
非贪婪模式后面需要放一个字符作为寻找终止标示。 
如:
 
 
 
没有终止标示,则不会进行检索
 
而有了如'r',后,会更具标示,检索到第一个'r'位置处
 
 
 
 
 
 
 |   
 
 
 
 |