匹配规则
    $:输入字符串的结尾位置
    ():标记一子表达式的开始和结束位置
    *:匹配前面的子表达式0次或者多次
    +:匹配前面的子表达式1次或者多次
    ?:匹配前面的子表达式0次或者1次
    ^:匹配输入字符串的开始位置
    {n}:匹配确定的n次
    {n,}:匹配至少n次
    {n,m}:最少匹配n次,最多匹配m次
    [ABC]:匹配A、B、C字母
    [^ABC]:不匹配A、B、C字母
    [A-Z]:表示区间,匹配所有大写字母\w:匹配字母、数字、下划线 === [A-Za-z0-9_]

    修饰符
    i:不区分大小写
    g:全局匹配
    m:多行匹配
    s:换行符\n

    1. import re
    2. # match和search的区别:search匹配整个字符串,match只匹配开始的字符串
    3. lines = "Cats are smarter than dogs"
    4. # matchObj = re.match(r'(.*) are (.*)? .*', lines, re.M | re.I)
    5. # matchObj = re.match(r'dogs', lines, re.M | re.I)
    6. matchObj = re.search(r'dogs', lines, re.M | re.I)
    7. if matchObj:
    8. print("matchObj.group():", matchObj.group())
    9. # print("matchObj.group(1):", matchObj.group(1))
    10. # print("matchObj.group(2):", matchObj.group(2))
    11. else:
    12. print("No match!")
    13. searchObj = re.search('(.*) are (.*)? .*', lines, re.M | re.I)
    14. print(searchObj.span())
    15. # 检索和替换 re.sub
    16. subObj = re.sub(r'Cats', '', lines)
    17. print(subObj)
    18. # 删除注释
    19. phone = "1583434343 # 这是电话"
    20. num = re.sub(r'#.*$', "", phone)
    21. print(num)
    22. # 编译正则表达式,传给match、search使用
    23. re_com = re.compile(r'(\d+)')
    24. print(re_com.search("343df232"))
    25. # findall匹配所有子串,返回列表
    26. re_findall = re_com.findall("343df232")
    27. print("findall返回匹配list:", re_findall)
    28. # finditer匹配所有子串,返回迭代器
    29. re_finditer = re_com.finditer('343df232')
    30. for i in re_finditer:
    31. print("返回迭代器:", i.group())
    32. # re.split 按匹配规则分割并返回列表
    33. print(re.split(" ", "zaygee hoan jaygee"))