鱼C论坛

 找回密码
 立即注册
查看: 1315|回复: 2

[已解决]输出结果不同

[复制链接]
发表于 2020-12-29 20:40:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

最佳答案
2020-12-29 21:04:30
非贪婪模式后面需要放一个字符作为寻找终止标示。
如:
1.png
2.png
没有终止标示,则不会进行检索

而有了如'r',后,会更具标示,检索到第一个'r'位置处
3.png
4.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-29 20:57:18 | 显示全部楼层
我又反复对照了一下,原来是(.*?)后面少一个空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-29 21:04:30 | 显示全部楼层    本楼为最佳答案   
非贪婪模式后面需要放一个字符作为寻找终止标示。
如:
1.png
2.png
没有终止标示,则不会进行检索

而有了如'r',后,会更具标示,检索到第一个'r'位置处
3.png
4.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 01:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表