Python3 正则表达式
1 ''' 2 正则表达式,又称规则表达式,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。 3 正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 4 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式, 5 就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 6 正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。 7 ''' 8 9 ''' 10 首先要清楚,字符串提供的方法是完全匹配 11 正则表达式则会给我们提供模糊匹配,通过re模块调用 12 ''' 13 # a = 'Hobbyer is a student!' 14 # print(a.find('bby')) # 查找 15 # chg = a.replace('is','are') # 替换元素 16 # print(chg) 17 # print(a.split('u')) # 分割 18 ''' 19 博客园 Infi_chu 20 ''' 21 22 import re # 调用re模块 23 # print(re.findall('b\b{2}l','Hobbyer is a student!')) # findall(规则,字符串,修改匹配规则),完全比配 24 25 ''' 26 正则元字符(11个): 27 . ^ $ * + ? {} [] | () \ 28 ''' 29 # # . 是通配符 30 # a1 = 'hello world' 31 # print(re.findall('w..l',a1)) # . 只能匹配任意一位,任意一个字符,多了就会不识别 32 # print(re.findall('w..l','w\norld')) # . 不能匹配换行符,除了换行符都可以匹配一位 33 # print(re.split('[a,c]','ddabcffadacd')) # 有顺序的分割,中间同时出现ac所以会出现空 34 # print(re.sub('e.l','wc',a1)) # 替换 35 # 36 # a3 = re.compile('\.com') # 多次用的方法,提高效率 37 # a3_out = a3.findall('www.example.com.cn') 38 # print(a3_out) 39 ''' 40 博客园 Infi_chu 41 ''' 42 # # ^ 43 # print(re.findall('w...d',a1)) 44 # print(re.findall('^w...d',a1)) # 从最开始匹配,如果有则出现,没有则匹配不到 45 # 46 # # $ 47 # print(re.findall('h...o$',a1)) # 只在结尾匹配 48 # 49 # # * 重复前面字符,大于等于零次 50 # print(re.findall('b.*u','http://www.baidu.com')) # 重复匹配,好几个点可用一个*表示 51 # print(re.findall('.*',a)) # 输出结果后方的'',是另外的情况(空情况,匹配0) 52 ''' 53 博客园 Infi_chu 54 ''' 55 # # + 重复匹配,大于等于1次 56 # print(re.findall('.+',a)) # 输出结果必须有,则不会出现空的情况 57 # 58 # # ? 匹配范围零次或1次 59 # print(re.findall('w?r','wwrr')) # 可以匹配0-1个字符 60 # 61 # # {} 匹配任意次数 62 # print(re.findall('w{5}r','wwwrrwwwwwrr')) # 匹配5个w和1个r 63 # print(re.findall('w{1,5}r','wwwrrwwwwwrrwr')) # 匹配1-5次 64 ''' 65 博客园 Infi_chu 66 ''' 67 # # [] 是字符集 68 # print(re.findall('w[c,e]r','wer')) # []中可以添加任意字符或字符串,多选1 69 # print(re.findall('w[a-z]','wff')) # 范围a-z 70 # print(re.findall('[a,*]','ww')) # * 不在是之前的功能,在[]之中只是普通的*号,但是(\ ^ -)例外 71 # print(re.findall('[a-z,0-9,A-Z]','afsasdSFA54asS')) 72 # print(re.findall('[^c]','acs')) # ^ 在[]是取反的意思 73 # print(re.findall('[^a,b]','abcdefg')) # 非a非b 74 ''' 75 博客园 Infi_chu 76 ''' 77 # \ 78 ''' 79 反斜杠后边跟元字符,使其去除特殊功能, 80 反斜杠后边跟普通字符,使其具有特殊功能 81 \d 匹配十进制数 82 \D 匹配任何非数字字符 83 \s 匹配任何空白字符 84 \S 匹配任何非空白字符 85 \w 匹配任何字母字符 86 \W 匹配任何非字母字符 87 \b 匹配一个单词和空格间的位置 88 ''' 89 # print(re.findall('\d{2}','asdw5d31asdw1a3d5s48w4d3a1w')) # 匹配两位数字 90 # print(re.findall('\swww','fg www')) # 匹配空白字符 91 # print(re.findall(r's\b','s is a s$udent')) # \b匹配了特殊字符 92 # print(re.findall(r's\b','s is a student')) 93 # c1 = re.search('wc','wsdwcasdwcaff') # search 只匹配找到的第一个 94 # print(c1) 95 # print(c1.group()) # 直接输出匹配内容,但是search没有匹配成功,调用group会报错 96 # print(re.findall('\\\\c','afekK:\c')) # 这里注意Python解释器中的转义,交给re模块之后又有转义,所以需要4个 97 # print(re.search(r'\bbasd','basd')) # r表示原生字符串,不需要转义 98 ''' 99 博客园 Infi_chu 100 ''' 101 # # () 分组 102 # print(re.search('(wc)+','fswfefwcdwc')) # 分组 103 # print(re.search('(wc)+','fswfefwcwc')) 104 ''' 105 博客园 Infi_chu 106 ''' 107 # # | 或 108 # print(re.search('(wc)|ff','ffwca')) # 或 109 110 ''' 111 较高级的用法 112 ''' 113 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo')) # ?P<>起名的格式,名字放在<>中,后面为匹配规则 114 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo').group()) 115 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo').group('id')) 116 # print(re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo').group('name')) 117 118 ''' 119 方法总结 120 正则表达式的方法: 121 findall():返回所有的结果,返回到1个列表当中 122 search():返回一个对象(object),返回匹配到的第一个对象,对象可以调用group()方法返回匹配内容 123 match():只在字符串开始的时候匹配,返回第一个匹配到的对象 124 split():分割点 125 sub():替换 126 compile():可以用来规定规则 127 ''' 128 129 130 ''' 131 博客园 Infi_chu 132 '''