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 '''

 

posted @ 2017-10-23 16:59  Infi_chu  阅读(1380)  评论(0编辑  收藏  举报