# . 匹配任意单个字符
# ^ 以什么字符开头 shift + 6
# $ 以字符结尾
# * 前面的字符出现0 次或多次
# + 前面的字符出现1 次或多次
# ? 出现0次或1次
# {m} 前面的字符出现 m 次
# {m,n} 前面的字符出现 m 到 n 次
# [] 中括号里面的任意字符
# | 字符选择左边或右边与括号一起用
# \d 匹配一串数字 相当于 [0-9]+
# \D 匹配非数字
# \w 匹配字母数字及下划线
# \W 匹配非字母数字及下划线符号需要单独匹配,[.]
p = re.compile('[a-z]{3}.jpg')
q = re.compile(r'[a-z]{3}[a-z]?[.]jpg$') # 应该这样使用,不加$ 则字符串后还有其它字符,也可以匹配成功
str = 'cetcjpgq1'
str1 = 'cetc.jpg'
print(p.match(str), q.match(str1))
结果:<re.Match object; span=(0, 7), match='cetcjpg'> <re.Match object; span=(0, 8), match='cetc.jpg'>