ret = re.match(r"正则表达式", 需要处理的字符串)
# ret.group()  # 如果匹配到则输出匹配到的数据


1、匹配单个字符
    .   匹配任意一个字符(除了\n)
    []  匹配[]中列举的字符
    \d  匹配数字,即0-9
    \D  匹配非数字,即不是数字
    \s  匹配空白,即空格、tab键
    \S  匹配非空白
    \w  匹配单词字符,即a-z、A-Z、0-9、_
    \W  匹配非单词字符
    [^0-9]  取非数字的任意一个字符

2、匹配多个字符
    *   匹配前一个字符出现0次或者无限次,即可有可无
    +   匹配前一个字符出现1次或者无限次,即至少有1次
    ?   匹配前一个字符出现1次或者0次,即要么有1次,要么没有
    {m} 匹配前一个字符出现m次
    {m,n}   匹配前一个字符出现从m次到n次
    re.match(r".*", html. re.S)  # re.S让.包括\n

3、判断开头和结尾
    ^   匹配字符串开头
    $   匹配字符串结尾

4、匹配分组
    |   匹配左右任意一个表达式,或的意思
    (ab)    将括号中字符作为一个分组  # re.match(r"", string).group(1)  表示取第一个括号的值
    \num    引用分组num匹配到的字符串
    (?P<name>)      分组起别名
    (?P=name)       引用别名为name分组匹配到的字符串
    re.match(r"<(?P<p1>\w*)>.*</(?P=p1)>", html_str).group()
    # 如果在正则表达式中需要用到了某些普通的字符,比如.?等,仅仅需要在他们前面添加一个反斜杠进行转义
    # re.match(r"", string).group(1)  # 表示取第一个括号的值
    # re.match(r"", string).group(2)  # 表示取第二个括号的值
#  re.match(r"<(\w*)>.*</\1>", html_str).group()  \1表示取第一个括号的值

5、re模块的高级用法
    search  不从头开始匹配,当匹配到一个字符跟它的正则相符时才开始
    findall     找出满足正则的字符串,返回一个列表
    # >>> re.findall(r"\d+", "python = 9000, c=7883,c++=15787")
            ['9000', '7883', '15787']
    sub     将匹配到的数据进行替换
    # >>> re.sub(r"\d+", '998', "python = 997, c=24554")
            'python = 998, c=998'
    split   根据匹配进行切割字符串,并返回一个列表
    # >>> re.split(r":| ", "info:xiaokang 33 jinan")
            ['info', 'xiaokang', '33', 'jinan']

    def add(temp):
        num = temp.group()
        num = int(num) + 1
        return str(num)
    # 先进行匹配,将匹配到的字符串作为add函数的参数传到add函数中,函数返回的值替换原来匹配到的字符串再输出
    ret = re.sub(r"\d+", add, "python = 997")
    print(ret)
    输出  :    python = 998

"""
#
# import re
#
# names = ["age", "_a?ge", "46_add", "___哈aee", "a56_", "jjj22", "a"]
# for name in names:
#     ret = re.match(r"[a-zA-Z_][a-zA-Z_0-9]*$", name)
#     if ret:
#         print("%s是有效的变量名" % name)
#     else:
#         print("%s是无效的变量名" % name)



import re

# def main():
#
#     string = input("请输入你的邮箱:")
#     # 如果在正则表达式中需要用到了某些普通的字符,比如.?等,仅仅需要在他们前面添加一个反斜杠进行转义
#     # re.match(r"", string).group(1)  # 表示取第一个括号的值
#     # re.match(r"", string).group(2)  # 表示取第二个括号的值
#     ret = re.match(r"^([a-zA-Z_0-9]){4,20}@(163|162)\.com$", string)
#     #  re.match(r"<(\w*)>.*</\1>", html_str).group()  \1表示取第一个括号的值
#     if ret:
#         print("%s是163邮箱!" % string)
#     else:
#         print("%s不是163邮箱!" % string)