这一节我们介绍一下关于多个字符的匹配。
import re
# * 匹配前一个字符0次或无限次
# 例:匹配一个大写字母加多个小写字母,或者只匹配一个大写字母
ma = re.match(r'[A-Z][a-z]*', 'Song')
print(ma.group()) # 输出:Song *前面的字符出现无限次
ma = re.match(r'[A-Z][a-z]*', 'S')
print(ma.group()) # 输出:S *前面的字符出现0次
# + 匹配前一个字符1次或无限次
# 例:匹配一个有效的python变量名(变量名以下划线或大小写字母开头,不能以数字开头)
ma = re.match(r'[_a-zA-Z]+', '_')
print(ma.group()) # 输出:_ +前面的字符出现1次
ma = re.match(r'[_a-zA-Z]+', '_Song')
print(ma.group()) # 输出:song +前面的字符出现无限次
#ma = re.match(r'[_a-zA-Z]+', '9')
#print(ma.group()) # 输出:报错 +前面的字符1次也没有出现
# ? 匹配前一个字符出现0次或1次
# 例:匹配0到99之间的任意整数
ma = re.match(r'[1-9]?[0-9]', '10')
print(ma.group()) # 输出:10 ?前面的字符出现1次
ma = re.match(r'[1-9]?[0-9]', '0')
print(ma.group()) # 输出:0 ?前面的字符出现0次
# {m} 匹配前一个字符出现m次
# 例:匹配邮箱
ma = re.match(r'[a-zA-Z0-9]{11}@163.com', '17610779197@163.com')
print(ma.group()) # 输出:17610779197@163.com {m}前面的字符出现11次
# {m,n} 匹配前一个字符出现m到n次
# 例:匹配邮箱
ma = re.match(r'[a-zA-Z0-9]{1,10}@163.com', 'lianflower@163.com')
print(ma.group()) # 输出:lianflower@163.com {m,n}前面的字符出现10次
# *? 匹配模式变为非贪婪模式,因为*是匹配前一个字符0次或无限次
# 所以*?就是尽量匹配前一个字符0次
# 例:匹配一个0到9之间的整数
ma = re.match(r'[0-9][a-z]*?', '1song')
print(ma.group()) # 输出:1 *?前面的字符出现0次
# +? 匹配模式变为非贪婪模式,因为+是匹配前一个字符1次或无限次
# 所以+?就是尽量匹配前一个字符1次
# 例:匹配一个数字加一个小写字母
ma = re.match(r'[0-9][a-z]+?', '1song')
print(ma.group()) # 输出:1s +?前面的字符出现1次
# ?? 匹配模式变为非贪婪模式,因为?是匹配前一个字符0次或1次
# 所以??就是尽量匹配前一个字符0次
# 例:匹配一个0到9之间的整数
ma = re.match(r'[0-9][a-z]??', '1song')
print(ma.group()) # 输出:1 ??前面的字符出现0次