770686119 发表于 2019-6-3 16:29:09

正则表达式group 是怎么分的?

源码如下:
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!!")

print(re.match('.*',line,re.M | re.I))
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)打印的结果我不知道怎么来的。

wp231957 发表于 2019-6-3 16:35:52

表达式里 你有两个括号,表示你分了两个组are 前一个 are后一个所以分别是Cats 、 smarter

770686119 发表于 2019-6-3 16:40:30

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

还是不太明白,我最后两行打印的是我认为提取出来的group(1) 和 group(2).
那么 group(1) 和 group(2)实际上是代表什么?

wp231957 发表于 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 又有啥关呢

770686119 发表于 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后得到的就相当于这俩句

wp231957 发表于 2019-6-3 17:41:36

770686119 发表于 2019-6-3 17:38
我理解的 group后得到的就相当于这俩句

在表达式中分组,和单独表达式不一样
要不然,就没有分组的概念了

770686119 发表于 2019-6-4 08:45:01

wp231957 发表于 2019-6-3 17:41
在表达式中分组,和单独表达式不一样
要不然,就没有分组的概念了

我再找找资料

770686119 发表于 2019-6-6 10:11:07

770686119 发表于 2019-6-4 08:45
我再找找资料

还是不能理解

770686119 发表于 2019-6-11 09:49:51

应该是这样理解:从第一个左括号开始到第2个左括号开始,属于group(1),因为正则表达式的匹配机制从左到右,group(2)从group(1)结束的位置开始匹配
页: [1]
查看完整版本: 正则表达式group 是怎么分的?