re就正则,是有语法的字符串,用来匹配目标字符串的
字符串匹配,根据你的规定书写字符串与目标字符串进行配对,如果能配对成功,代表目标字符串满足需求
正则表达式:是一个可以同时制定多个规则的字符串
# 单个字符 improt re # re.I不区分大小写的匹配 print(re.findall(r'a', 'abc123嘿嘿abcABC', flags=re.I)) # ['a', 'a', 'A'] # a|b a或b单个字符 print(re.findall(r'a|b', 'abc123嘿嘿abcABC', flags=re.I)) # ['a', 'b', 'a', 'b', 'A', 'B'] # [a,b] a或,或b单个字符 print(re.findall(r'[a,b]', 'abc,123嘿嘿abcABC', flags=re.I)) # ['a', 'b', ',', 'a', 'b', 'A', 'B'] # [^ab]非a及非b的所有单个字符 print(re.findall(r'[^ab]', 'abc,123嘿嘿abcABC')) # ['c', ',', '1', '2', '3', '嘿', '嘿', 'c', 'A', 'B', 'C'] # [a-z]所有单个小写字母 [A-Z]所有单个大写字母 [0-9]所有单个数字 print(re.findall(r'[a-z]', 'abc,123嘿嘿abcABC')) # ['a', 'b', 'c', 'a', 'b', 'c'] print(re.findall(r'[0-9]', 'abc,123嘿嘿abcABC')) # ['1', '2', '3'] # 所有小写大写数字单个字符 print(re.findall(r'[a-z]|[A-Z]|[0-9]', 'abc,123嘿嘿abcABC')) # ['a', 'b', 'c', '1', '2', '3', 'a', 'b', 'c', 'A', 'B', 'C'] print(re.findall(r'[A-Za-z0-9]', 'abc,123嘿嘿[abcABC')) # ['a', 'b', 'c', '1', '2', '3', 'a', 'b', 'c', 'A', 'B', 'C'] # 单个数字 == [0-9] print(re.findall(r'd', 'abc,123嘿嘿[abcABC')) # ['1', '2', '3'] # w == [A-Za-z0-9_] 将常见的汉字就理解为单个字母 print(re.findall(r'w', 'abc,123嘿[_')) # ['a', 'b', 'c', '1', '2', '3', '嘿', '_'] # s 单个空:空格、制表符、换页符等 # print('f v') print(re.findall(r's', 'f v ')) # ['x0c', ' ', ' ', ' ', 'x0b', ' '] # D就是d的对立面:非数字的所有单个字符 W就是w的对立面 S就是s的对立面 print(re.findall(r'D', 'abc,123嘿[_')) # ['a', 'b', 'c', ',', '嘿', '[', '_'] # 单个汉字 print(re.findall(r'[u4e00-u9fa5]', 'abc,123嘿[_')) # ['嘿']
正則的匹配步驟
就是匹配这个字符 print(re.findall(r'\', 'adp\')) # ['\', '\', '\'] print(re.findall(r'\', r'adp\')) # ['\', '\', '\', '\'] print(re.findall(r' ', ' ')) # [' '] print(re.findall(r'd', 'd')) # [] print(re.findall(r'\d', 'd')) # ['\d'] re_obj = re.compile(r' ') # 转换成匹配换行符的正则对象 res = re_obj.findall(' ') print(res) # [' '] re_obj = re.compile(r'\d') # 转换成匹配 d 的正则对象 res = re_obj.findall('d') print(res) # ['\d'] re_obj = re.compile(r'd') # 转换成匹配 数字 的正则对象 res = re_obj.findall('d') # d不是数字 print(res) # [] re_obj = re.compile(r'\n') # 转换成匹配 的正则对象 res = re_obj.findall(' ') # 代表换行,不能被匹配 print(res) # [] res = re_obj.findall(r' ') # 就代表 ,能被匹配 print(res) # ['\n']
匹配多個字符串
import re # .会匹配除 以为的所有单个字符 print(re.findall(r'.', '*\_+= ')) # ['*', '\', '_', '+', '=', ' ', ' ', ' '] # re.S会让.能匹配所有单个字符 print(re.findall(r'.', '*\_+= ', re.S)) # ['*', '\', '_', '+', '=', ' ', ' ', ' ', ' '] # 明确个数的重复 # {n} print(re.findall(r'a', 'aaabbb')) # ['a', 'a', 'a'] print(re.findall(r'a{2}', 'aaabbb')) # ['aa'] print(re.findall(r'ab', 'aabbababab')) # ['ab', 'ab', 'ab', 'ab'] print(re.findall(r'a{2}b{2}', 'aabbababab')) # ['aabb'] print(re.findall(r'ab{2}', 'aabbababab')) # ['abb'] # {n,} 匹配n到无数个,题中最少匹配abb, 贪婪匹配 abbb 能被匹配为 abb 和 abbb,优先匹配多的 print(re.findall(r'ab{2,}', 'ababbabbbabbbb')) # ['abb', 'abbb', 'abbbb'] # {,n} 匹配0到n个,ab{,2} 优先匹配abb,没有ab也行,如果还没有a也将就 print(re.findall(r'ab{,2}', 'aababbabbbabbbb')) # ['a', 'ab', 'abb', 'abb', 'abb'] # {n,m} 匹配n到m个,ab{1,3} 优先匹配 abbb,再考虑abb, ab print(re.findall(r'ab{1,3}', 'aababbabbbabbbb')) # ['ab', 'abb', 'abbb', 'abbb'] # 特殊符号的重复 # *: 匹配0到无数个 print(re.findall(r'ab*', 'aababbabbbabbbb')) # ['a', 'ab', 'abb', 'abbb', 'abbbb'] # +: 匹配1到无数个 print(re.findall(r'ab+', 'aababbabbbabbbb')) # ['ab', 'abb', 'abbb', 'abbbb'] # ?: 匹配0到1个 print(re.findall(r'ab?', 'aababbabbbabbbb')) # ['a', 'ab', 'ab', 'ab', 'ab'] # 需求:匹配所以单词 print(re.findall(r'[a-z]+', 'abc def hello print')) # ['abc', 'def', 'hello', 'print'] print(re.findall(r'[a-z]+', 'abc def hello print')) # ['abc', 'def', 'hello', 'print'] # 代表单词边界,用空格(字符串的结尾也包括)作为匹配规则 print(re.findall(r'[a-z]*c', 'abc def hello print acb zc')) # ['abc', 'ac', 'zc'] print(re.findall(r'[a-z]*c', 'abc def hello print acb zc')) # ['abc', 'zc']