鱼C论坛

 找回密码
 立即注册
查看: 1846|回复: 8

[迷途问路] 正则表达式group 是怎么分的?

[复制链接]
发表于 2019-6-3 16:29:09 | 显示全部楼层 |阅读模式

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

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

x
源码如下:
  1. import re

  2. line = "Cats are smarter than dogs"
  3. # .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
  4. matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)

  5. if matchObj:
  6.     print("matchObj.group() : ", matchObj.group())
  7.     print("matchObj.group(1) : ", matchObj.group(1))
  8.     print("matchObj.group(2) : ", matchObj.group(2))
  9. else:
  10.     print("No match!!")

  11. print(re.match('.*',line,re.M | re.I))
  12. print(re.match('.*?',line,re.M | re.I))
复制代码


输出结果如下:

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter
<_sre.SRE_Match object; span=(0, 26), match='Cats are smarter than dogs'>
<_sre.SRE_Match object; span=(0, 0), match=''>

我的问题是:
group  是 提取匹配字符串里面()括起来的,那group(1)和 group(2)打印的结果我不知道怎么来的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-3 16:35:52 | 显示全部楼层
表达式里 你有两个括号,表示你分了两个组  are 前一个 are后一个  所以分别是Cats 、 smarter
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-3 16:40:30 | 显示全部楼层
wp231957 发表于 2019-6-3 16:35
表达式里 你有两个括号,表示你分了两个组  are 前一个 are后一个  所以分别是Cats 、 smarter

还是不太明白,我最后两行打印的是我认为提取出来的group(1) 和 group(2).
那么 group(1) 和 group(2)实际上是代表什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-3 16:48:48 | 显示全部楼层
770686119 发表于 2019-6-3 16:40
还是不太明白,我最后两行打印的是我认为提取出来的group(1) 和 group(2).
那么 group(1) 和 group(2)实 ...

print(re.match('.*',line,re.M | re.I))
print(re.match('.*?',line,re.M | re.I))

你是说这两个 match 和对应的结果

<_sre.SRE_Match object; span=(0, 26), match='Cats are smarter than dogs'>
<_sre.SRE_Match object; span=(0, 0), match=''>

吗?  这和group 又有啥关呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-3 17:38:48 | 显示全部楼层
wp231957 发表于 2019-6-3 16:48
print(re.match('.*',line,re.M | re.I))
print(re.match('.*?',line,re.M | re.I))

我理解的 group后得到的就相当于这俩句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-3 17:41:36 From FishC Mobile | 显示全部楼层
770686119 发表于 2019-6-3 17:38
我理解的 group后得到的就相当于这俩句

在表达式中分组,和单独表达式不一样
要不然,就没有分组的概念了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-4 08:45:01 | 显示全部楼层
wp231957 发表于 2019-6-3 17:41
在表达式中分组,和单独表达式不一样
要不然,就没有分组的概念了

我再找找资料
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-6 10:11:07 | 显示全部楼层

还是不能理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 09:49:51 | 显示全部楼层
应该是这样理解:从第一个左括号开始到第2个左括号开始,属于group(1),因为正则表达式的匹配机制从左到右,group(2)从group(1)结束的位置开始匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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