#! /usr/bin/env python # -*- coding:utf-8 -*- import re # 正则表达式:re模块 # 1.普通字符:大多数字符和字母都会跟自身匹配 # re.fiandall() 返回一个列表 #2.元字符: # . 通配符 一个只能匹配一个结果 # ^ 以xx开头的匹配 # $ 以xx为结尾的 # * 重复 匹配0到多次 # + 重复 匹配1到多次 # ? 匹配0到1次 # {m,n} 匹配前一个元字符m到n次 # \\ 转义字符 其后字符失去特殊元字符含义 #[] 字符集 可匹配任意一个字符 # | 或 逻辑表达式 # \d = [0-9] 匹配一个数字 # \D = [^0-9] 匹配非数字 # \s 匹配任意空白字符 # \S 匹配非空白字符 # \w =[a-zA-Z_] 匹配数字、字母、下划线中任意一个字符 # \W 匹配非数字、字母、下划线中的任意字符 #3.模式 # I 忽略大小写模式 # L 字符集本地化 # M 多行模式 # S 此模式下.可匹配包括换行符在内的任意字符 # X 冗余模式 忽略表达式中的空白和注释 # findall(pattern, string, flags=0) str = "WoshiZhongGuoRen" regex0 = re.findall("guo",str) regex1 = re.findall("guo",str,re.I) print(regex0) print(regex1) str1 = '''where are you I an here oh I see''' index0 = re.findall("^\w+",str1) index1 = re.findall("^\w+",str1,re.M) print(index0) print(index1) #4.函数 #邮箱正则表达式 #compile(pattern, flags=0) 使用 compile 函数预编译出一个正则模式之后再去使用,这样在后面的代码中可以很方便的复用它 #编译其实是很费时的,这样可以提升效率 str2 = "23223whh./#$weijigh@126.comrtdfd" emailregex = re.compile("[0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[com,cn,net]{1,3}") index2 = emailregex.findall(str2) print(index2)#['weijigh@126.com'] #match(pattern, string, flags=0) # 使用指定正则去待操作字符串中寻找可以匹配的子串, 返回匹配上的第一个字串,并且不再继续找 #从字符串开始处开始查找的,如果开始处不匹配,则不再继续寻找,找不到时返回 None #web框架大量使用 index3 = emailregex.match(str2) print(index3)#None #search(pattern, string, flags=0) #不限制正则表达式的开始匹配位置,匹配找到的第一个字符串 index4 = emailregex.search(str2) print(index4)#<_sre.SRE_Match object; span=(12, 27), match='weijigh@126.com'> #split(pattern, string, maxsplit=0, flags=0) #maxsplit 指定切分次数 #函数使用给定正则表达式寻找切分字符串位置,返回包含切分后子串的列表 # 如果匹配不到,则返回包含原字符串的一个列表 index5 =emailregex.split(str2) print(index5)#['23223whh./#$', 'rtdfd'] #sub(pattern, repl, string, count=0, flags=0) #将正则表达式 pattern 匹配到的字符串替换为 repl 指定的字符串 #参数 count 用于指定最大替换次数 index6 = emailregex.sub('world',str2) print(index6)#23223whh./#$worldrtdfd #5.组(组与Match对象是Python正则式的重点) #分组的目的:从匹配到的结果中再次提取想要的部分结果 #(?P...) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name #(?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则 str3 = "tom 19 05317652" p=re.compile(r'(?P [a-z]+)\s+(?P \d+)\s+(?P \d+).*', re.I) p.groupindex index7 = p.match(str3) print(index7) print(index7.group()) print(index7.group('age'))