'''1. 元字符 符号 含义 . 匹配除换行以外的任意字符 ^ 匹配字符串的开始位置,在[]中出现为非的意思 $ 匹配字符串的结束位置 * 匹配0次、1次或多次前面的原子 ? 匹配0次或1次前面的原子 + 匹配1次或多次前面的原子 {n} 前面的原子恰好出现n次 {n,} 前面的原子至少出现n次 {n,m} 前面的原子至少出现n次,至多出现m次 | 模式选择符 () 模式单元符,作分组:在findall 中使用,返回的参数是()中匹配的值,不会管外面其他参数 (?:reg):取消优先级,在findall中使用,会返回满足全部正则的字符,而不是返回字符的一部分(reg是变量) (?P<name>);给分组指定name. (name是变量) [] 字符集,里面出现的字符都只表示某一个字符,不会有转义问题 eg: [a-z0-9A-Z] 数字,大小写字母中的一个 通用字符 符号 含义 \w 匹配任意一个字母、数字或下划线 \W 匹配除字符、数字和下划线以外的任意一个字符 \d 匹配任意一个十进制数 \D 匹配除十进制数以外的任意一个其它字符 \s 匹配任意一个空白字符 \S 匹配除空白字符以外的任意一个其它字符 \b:表示字母数字与非字母数字的边界, 非字母数字与字母数字的边界。 \B:表示字母数字与(非非)字母数字的边界,非字母数字与非字母数字的边界。 eg:匹配以a开头的字符串 str = 'adfd fdfad1a 2 a31 fda a' pattern = r'\ba\w*\b' print(re.findall(pattern,str))2. 贪婪模式与懒惰模式 pattern1 = "p.*n" # 贪婪模式 pattern2 = "p.*?n" # 懒惰模式 ?指定前一个数量元字符匹配次数为1(*为0-1) 3. 模式修正符 符号 含义 I 匹配时忽略字母大小写 M 多行匹配 L 做本地化识别匹配 U 根据Unicode字符及解析字符 S 使元字符"."匹配包括换行在内的所有字符 X 使存在分行符的正则表达式,也能正确匹配(目的:让表达式逻辑更清晰) re.findall('pattern1','str',re.I)4. RE中常用的方法(函数) 方法/属性 作用 re.match(pattern, string, flags=0) 从字符串的起始位置匹配,成功返回MatchObject 实例,失败就返回none re.search(pattern, string, flags=0) 查找第一个成功的匹配,返回SearchObject 实例,失败就返回none re.findall(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个列表返回 re.finditer(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个迭代器返回 re.sub(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串 re.subn(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串,并返回一个元组:(result,替换了几次) re.split(pattern, string, maxsplit=0, flags=0) 根据正则,对源字符串进行切割 re.compile(pattern[, flags]) 作用:把正则表达式语法转化成正则表达式对象,通过对象来调用函数 好处: 1.此函数是先编译为正则对象再来调用,因此在多次匹配时,可以减少编译次数 2.函数调用更简捷,不用再传pattern
函数参数说明: pattern:匹配的正则表达式。 string:要匹配的字符串。 flags:标记为,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 repl:替换的字符串,也可作为一个函数。 count:模式匹配后替换的最大次数,默认0表示替换所有匹配。 maxsplit:最大切割次数 分组函数返回实例: 方法/属性 作用 group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 groups() 返回包含所有小组字符串的元组,从1到所含的小组 groupdict() 返回以有别名的组的别名为键、以该组截获的子串为值的字典 start() 返回匹配开始的位置 end() 返回匹配结束的位置 span() 返回一个元组包含匹配(开始,结束)的位置'''import redef re_object_test(): ''' 类似的函数有:match()、search()…,返回值为一个对象 方法: 功能: group() 返回 RE 匹配的字符串值 start() 返回 匹配开始的位置 end() 返回 匹配结束的位置 span() 以元组形式返回 匹配( 开始,结束 ) 的位置 ''' pattern = r"python." # 设定以 "python" 为切割标识符 string = "ABCpython2DEFpython3GHIpython4567" result = re.search(pattern, string) print(result.group()) # 输出匹配的内容 print(result.span()) # 输出匹配的位置信息 print(result.start()) # 输出匹配内容的 起始位置 print(result.end())def sub_test(): ''' 查找并替换 语法格式: re.sub(pattern, repl, string, count=0, flags=0) pattern:传入需要匹配的正则表达式。 repl:替换后的字符串 string:传入需要匹配的源字符串。 count:指定替换的个数 flags:标志位(可选参数),可传入“模式修正符”等信息。 ''' pattern = r"python." string = "ABCpython2DEFpython3GHIpython4567" result1 = re.sub(pattern, "java", string) # 默认替换所有 result2 = re.sub(pattern, "java", string, 2) # 替换 2 次 print(result1) print(result2)def split_test(): ''' 语法格式: re.split(pattern, string, maxsplit=0, flags=0) pattern:传入需要匹配的正则表达式。 string:传入需要匹配的源字符串。 maxsplit:指定最大的切割次数 flags:标志位(可选参数),可传入“模式修正符”等信息。 ''' pattern = r"python" # 设定以 "python" 为切割标识符 string = "ABCpython2DEFpython3GHIpython4567" result1 = re.split(pattern, string) # 全局切割 result2 = re.split(pattern, string, 2) # 只切割 2 次 print(result1) print(result2)def search_test(): ''' re.search(pattern, string[, flags]) 返回第一个查找到的 作用:在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。 ''' pattern = r"(?P<name>python)(?P<t>.)" string = "ABCpython2DEFpython3GHIpython4567" res = re.search(pattern,string) print(res.group('t')) print(res.group(1)) print(res.groupdict()) print(res.span()) passif __name__ == "__main__": # sub_test() # split_test() # re_object_test() search_test()
来源:https://www.cnblogs.com/lides/p/11116963.html