正则表达式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)打印的结果我不知道怎么来的。 表达式里 你有两个括号,表示你分了两个组are 前一个 are后一个所以分别是Cats 、 smarter wp231957 发表于 2019-6-3 16:35
表达式里 你有两个括号,表示你分了两个组are 前一个 are后一个所以分别是Cats 、 smarter
还是不太明白,我最后两行打印的是我认为提取出来的group(1) 和 group(2).
那么 group(1) 和 group(2)实际上是代表什么? 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 又有啥关呢
wp231957 发表于 2019-6-3 16:48
print(re.match('.*',line,re.M | re.I))
print(re.match('.*?',line,re.M | re.I))
我理解的 group后得到的就相当于这俩句 770686119 发表于 2019-6-3 17:38
我理解的 group后得到的就相当于这俩句
在表达式中分组,和单独表达式不一样
要不然,就没有分组的概念了 wp231957 发表于 2019-6-3 17:41
在表达式中分组,和单独表达式不一样
要不然,就没有分组的概念了
我再找找资料 770686119 发表于 2019-6-4 08:45
我再找找资料
还是不能理解 应该是这样理解:从第一个左括号开始到第2个左括号开始,属于group(1),因为正则表达式的匹配机制从左到右,group(2)从group(1)结束的位置开始匹配
页:
[1]