输出结果不同
import reline = "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'位置处
页:
[1]