技术分享图片
人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

Python_re模块

一、正则表达式简介

  正则表达式是一种对字符串(包括普通字符、非打印字符、通用字符(称为“原子”)、特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

  正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

二、“原子”讲解

  ### 普通字符作为原子

    普通字符就是指普通的字符,比如A-Za-z, 0-9。   

 1  #导入re模块
 2 import re
 3 string = "abcd123456ABC"
 4 pat = "abc"
 5 ret = re.search(pat, string)   
 6 print(ret)
 7 <re.Match object; span=(0, 3), match='abc'>

 

   ### 非打印字符作为原子

    非打印字符指在计算机中有一些字符是确确实实存在,但是它们不能够显示或者打印出来。

    比如:1、ASCII码表为例,ascii码值在0-31的为控制字符,无法显示和打印

       2、/t /n 等一些转义字符

1 #导入re模块
2 import re
3 string = '''abcd12
4 3456ABC'''
5 pat = "\n"
6 ret = re.search(pat, string)
7 print(ret)
8 <re.Match object; span=(6, 7), match='\n'>

   ### 通用字符作为原子

1 '''
2     \w 匹配的是任意字母、数字、下划线,类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。
3     \W 除匹配的是任意字母、数字、下划线,等价于“[^A-Za-z0-9_]”。
4     \d 匹配的是数字,等价于[0-9]。
5     \D 除匹配的是数字,等价于[^0-9]。
6     \s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
7     \S 匹配任何可见字符。等价于[^ \f\n\r\t\v]。
8 
9 '''

  ###原子表 ==> [ 任意字符 ]

 1  #导入re模块
 2 import re
 3 string = '''abcd123456ABC'''
 4 pat = "abc[abcde]" #在[]中的任意字符选出一个存在匹配的值,如没有则返回None
 5 ret1 = re.search(pat, string)
 6 pat = "abc[^abc]"
 7 ret2 = re.search(pat, string) 
 8 print(ret1)
 9 print(ret2)
10 <re.Match object; span=(0, 4), match='abcd'>
11 <re.Match object; span=(0, 4), match='abcd'>
12 [Finished in 0.1s]

 三、元字符

  特殊字符

 1 ^    #匹配输入字行首。
 2 $    #匹配输入字行尾。
 3 \    # 转义字符
 4 {n}  #n次
 5 {n,} #至少n次
 6 {n,m}#至少n次,至多n次
 7 .    #匹配除\n的任意字符
 8 *    #匹配前一个字符0/多次
 9 +    #匹配前一个字符1/多次
10#匹配一个字符0/1
11 |    #或。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式, zuo | you , 左边的长度匹配 大于 右边的长度匹配

 

      ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com')
      print(ret)#['oldboy']     这是因为findal1会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
      ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
      print(ret)#['www.oldboy.com']     

        split里也有一个坑
      ret=re.split("\d+","eva3egon4yuan")print(ret)#结果:['eva','egon','yuan']
      ret=re.split("(\d+))","eva3egon4yuan")
      print(ret)#结果:['eva','3','egon','4’,‘yuan]
      #在匹配部分加上()之后所切出的结果是不同的,
      #没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
      #这个在某些需要保留匹配部分的使用过程是非常重要的。

 
 
posted @ 2019-09-07 18:15  山海郡  阅读(176)  评论(0编辑  收藏  举报