#参考https://mp.weixin.qq.com/s/t1dYo75e_w1sGuIlksz6RQ
>>> str1 = "acb azb abb a6b aab"
>>> result1 = re.findall("a[a-z]b",str1)
>>> print(result1)
['acb', 'azb', 'abb', 'aab']
>>> result2 = re.findall("a[0-9]b",str1)
>>> print(result2)
['a6b']
>>> result3 = re.findall("a[za6]b",str1)
>>> print(result3)
['azb', 'a6b', 'aab']
#处表示中间的字符,只能是z或a或6这三者中任何一个,才能被匹配到。
>>> str2 = "我是孙悟空,您可以称呼我为齐天大圣!"
>>>
>>> result1 = re.findall("孙悟空|齐天大圣",str2)
>>>
>>> print(result1)
['孙悟空', '齐天大圣']
>>> str3 = "\n123456"
>>> str4 = "\\n123456"
>>> str5 = r"\n123456"
>>> result3 = re.findall("n",str3)
>>> result4 = re.findall("n",str4)
>>> result5 = re.findall("n",str5)
>>>
>>> print(result3)
[]
>>> print(result4)
['n']
>>> print(result5)
['n']
#一个转义字符 + 字母n,是一个特殊整体\n,用于表示换行符,因此匹配不到n这个字母。
#两个转义字符 + 字母n,其中\n是一个特殊整体,再加上一个转义符号\,就将其变为一个普通字母n,因此匹配到了n。
#其实和②的含义一样,也可以将特殊整体\n,变为一个普通字母n,因此同样可以匹配到n。
>>> str6 = "你来自哪里?我来自湖北省"
>>>
>>> result7 = re.findall("^你",str6)
>>> result8 = re.findall("^来",str6)
>>>
>>> result9 = re.findall("省$",str6)
>>> result10 = re.findall("湖北$",str6)
>>>
>>> print(result7)
['你']
>>> print(result8)
[]
>>> print(result9)
['省']
>>> print(result10)
[]
①处点号表示匹配(除了换行符)任意单个字符。因此,只要开头是a,结尾是b,中间是任何一个单个字符,都会被匹配上。
②处号表示匹配前面一个字符0或多次,在这里 * 号前面是a。因此,只要结尾是b,前面是>=0个a的值,都会被匹配上。
③处?号表示匹配前面一个字符最多一次,在这里 * 号前面是a。因此,前面是大于等于0、小于等于1个a的值,都会被匹配上。
④.组合 ,称为“贪婪匹配”,是因为它会匹配到尽可能多的内容。原本开头是a,那么只要找到b,就是一个返回值。但是贪婪匹配不这样,它会一直朝后面走,直到找到最后一个b才肯罢休,然后返回一个超级长的字符串。
⑤.*?组合 ,称为“非贪婪匹配”,就是为了制止贪婪匹配而生的。它不贪得无厌,只要开头是a,你后面不是想要b吗,我碰到第一个就给你返回了。