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) :