python正则之分组

import re

line = "many brown Cats are more smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
# matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
matchObj = re.match(r'(.*) (.*?) are (.*?) (.*)', line, re.M | re.I)	# 1
matchObj = re.match(r'(.*?) (.*) are (.*?) (.*)', line, re.M | re.I)	# 6

if matchObj:
    # group()用于获得一个或多个分组匹配的字符串
    # 当要获得整个匹配的子串时,可直接使用 group() 或 group(0)
    print("matchObj.group() : ", matchObj.group())
    print("matchObj.group(1) : ", matchObj.group(1))
    print("matchObj.group(2) : ", matchObj.group(2))
    print("matchObj.group(3) : ", matchObj.group(3))
    print("matchObj.group(4) : ", matchObj.group(4))
else:
    print("No match!!")

1.几个括号就是几个分组
2.(.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串。意味着后面如果还有字符串,可以接着往下匹配。
3.# 1 中,分4组,要注意的是固定字符串“are”或“more”,空格,匹配是否贪婪模式等。看下面代码与结果体会:

####-----------------------------1-----------------------------####	与 6 对比。与 5 其实是一样的结果
matchObj = re.match(r'(.*) (.*?) are (.*?) (.*)', line, re.M | re.I)	# 注意 有 空格
# 结果
matchObj.group() :  many brown Cats are more smarter than dogs
matchObj.group(1) :  many brown
matchObj.group(2) :  Cats
matchObj.group(3) :  more
matchObj.group(4) :  smarter than dogs
####-----------------------------2-----------------------------####
matchObj = re.match(r'(.*)(.*?) are (.*?) (.*)', line, re.M | re.I)	# 注意 没有 空格
# 结果
matchObj.group() :  many brown Cats are more smarter than dogs
matchObj.group(1) :  many brown Cats
matchObj.group(2) :  
matchObj.group(3) :  more
matchObj.group(4) :  smarter than dogs
####-----------------------------3-----------------------------####
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)	# 只有两组,group(3)会报错
# 结果
matchObj.group() :  many brown Cats are more smarter than dogs
matchObj.group(1) :  many brown Cats
matchObj.group(2) :  more
####-----------------------------4-----------------------------####
matchObj = re.match(r'(.*) (.*) more (.*?) (.*)', line, re.M | re.I)	# 注意与下一句中单词区别
# 结果
matchObj.group() :  many brown Cats are more smarter than dogs
matchObj.group(1) :  many brown Cats
matchObj.group(2) :  are
matchObj.group(3) :  smarter
matchObj.group(4) :  than dogs
####-----------------------------5-----------------------------####
matchObj = re.match(r'(.*) (.*) are (.*?) (.*)', line, re.M | re.I)	# 注意与上一句中单词区别
# 结果
matchObj.group() :  many brown Cats are more smarter than dogs
matchObj.group(1) :  many brown
matchObj.group(2) :  Cats
matchObj.group(3) :  more
matchObj.group(4) :  smarter than dogs
####-----------------------------6-----------------------------####	与  1 对比
matchObj = re.match(r'(.*?) (.*) are (.*?) (.*)', line, re.M | re.I)
# 结果
matchObj.group() :  many brown Cats are more smarter than dogs
matchObj.group(1) :  many
matchObj.group(2) :  brown Cats
matchObj.group(3) :  more
matchObj.group(4) :  smarter than dogs
####-----------------------------7-----------------------------####
matchObj = re.match(r'(.*) (.*?) are (.*) (.*?)', line, re.M | re.I)
# 结果
matchObj.group() :  many brown Cats are more smarter than 
matchObj.group(1) :  many brown
matchObj.group(2) :  Cats
matchObj.group(3) :  more smarter than
matchObj.group(4) :  
####-----------------------------8-----------------------------####
matchObj = re.match(r'(.*?) (.*?) are (.*?) (.*)', line, re.M | re.I)
# 结果
matchObj.group() :  many brown Cats are more smarter than dogs
matchObj.group(1) :  many
matchObj.group(2) :  brown Cats
matchObj.group(3) :  more
matchObj.group(4) :  smarter than dogs
####-----------------------------9-----------------------------####
matchObj = re.match(r'(.*?) (.*?) are (.*?) (.*?)', line, re.M | re.I)
# 结果
matchObj.group() :  many brown Cats are more 
matchObj.group(1) :  many
matchObj.group(2) :  brown Cats
matchObj.group(3) :  more
matchObj.group(4) :  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值