zoukankan      html  css  js  c++  java
  • 正则表达式(未完待续)

    01-02 正则表达式

    一、简介

    #正则表达式定义
    能够表示一定意义的【字符串】的组合就是正则表达式,正则表达式就是一个字符串
    
    
    #正则表示式的来源
    1.来源--unix操作系统。正则表达式  叫做posix (两个版本bre和ere)
    2.prel, python等语言,都有独特的正则语法。叫做pcre正则
    3.常用的两大正则  posix系列和pcre系列
    4.prel语言使用【pcre】, c语言使用【posix】, php【pcre/posix】, python使用【pcre】
    
    #正则的作用
    1.字符串过滤:在字符串中获取需要的部分字符。
    2.验证字符串:用户名,密码相关的输入框。
    3.切割字符串:划分字符内容。
    4.替换字符串:替换文章相关的信息。
    5.爬虫中大量使用正则。
    

    二、正则表达式的组成

    '''
    正则的组成:由原子,元字符及模式修正符组成 。【其他语言中可能存在定界符】
    '''
    
    
    #原子:
    组成正则表达式的最小单位,一个正则表达式至少需要一个原子。
    1.所有可见字符都是原子:a,b,c,d,A,B,C,D,你,我,他+—*&……%¥#@
    2.所有不可见字符也是原子:	, 
    , 
    ......(转义字符)
    3.正则专用转义字符:
    d  表示0~9之间任意【一个】字符 -> [0123456789]自定义原子列表格式
    D  表示除了0~9之外的任意【一个】字符 -> [^0-9]自定义排除格式
    s	表示任意【一个】空白字符 (空格(' '), 换页('f'), 换行('
    '), 	   回车('
    '), 水平制表符('	'),垂直制表符('v')) -> [             
    	
    fv]自定义原子列表
    S	表示任意一个非空白字符(可见字符) -> [^ 
    fv	]自定义排除列	 表格式
    w	表示0~9a~zA~Z和_中的任意【一个】字符 -> [0~9a~zA~Z_]自定义列表	格式
    W	表示除了0~9a~zA~Z和_之外的任意【一个】字符 -> [^0~9a~zA~Z_]自	定义排除列表格式
    .	表示任意一个字符[除了
    ] [^
    ]
    
    
    #元字符:[原子修饰符]
    	[] 自定义原子列表
        	表示自定义原子列表中的任意一个字符,如果多个字符在ascii码中连     续的,可以进行缩写。例如[0123456789] -> [0-9]
            
            
        [] 自定义排除列表
        	表示自定义原子列表之外的任意一个字符如果多个字符在ascii码中连     续的,可以进行缩写。例如D ->[^0-9]
            
            
        与数量相关的元字符
        +	表示1个或者多个修饰的原子 【1,正无穷】 {1,}
        ?	表示0个或者1个修饰的原子 【0, 1】 {0,1}
        *	表示任意一个修饰的原子 【0, 正无穷】 {0,}
        {m} 表示必须为m个修饰的原子
        {m,n}	表示必须为m到n个修饰的原子 m,n都包含在内
        {m,}	表示必须为m到正无穷个修饰的原子【m, 正无穷】
        {,n}	表示必须为小于n个修饰的原子【0,n】
            
            
        A	表示限定内容必须在整个字符串的开头部位
        	表示限定内容必须在整个字符串的结尾部位
        ^	表示限定内容必须在整个字符串的开头部位,支持多行匹配模式
        $	表示限定内容必须在整个字符串的结尾部位,支持多行匹配模式
    
        
        	表示能够当做英文单词分割的字符,(除了字母和数字 都是词边界,汉		字作为字母处理)代表【一个】字符
        B	表示不能够当作英文单词分割的字符(非词边界,就是字母和数字)代			表【一个】字符
        
        |	表示选择关系,左右的完整内容二选一 非常重要
            
        ()	1.改变正则表达式中的优先级
        	2.将多个原子视为一个原子处理,方便使用元字符。
            3.将匹配的内容当做模式单元进行存储
           
    '''
        额外补充:多行模式,如果字符串中包含
    字符,则可以在匹配的时候使用		多行匹配模式,多行匹配模式就是将每一行当做独立的字符串进行匹配。
          注意:多行模式需要使用模式修正符
    '''        
            
    
    #模式修正符
    	设定匹配的一些额外的规则
        re.A 或者写成re.ASCII 在ASCII模式下进行正则匹配
        re.U 或者写成 re.UNICODE 在UNICODE模式下进行正则匹配(例如汉字也可以当做字母) 默认情况下
        re.S 使得原子原子.可以匹配任意字符,包含
    
        re.M 或者re.MULTILINE 匹配操作在多行模式下进行 都是^和$相关
        re.X 或者re.VERBOSE 匹配的时候忽略正则表达式中的空格或者注释
        re.I 或者re.IGNORECASE 匹配过程中忽略大小写
        
    ## 转义字符的应用
        字符串:
      
      	  \ ...
        
        因为在正则的元字符和原子当中,使用了部分的符号作为语法,为了匹配这些符号的单纯字符,需要在正则表达式中加上即可去掉意义,获取字符。
        
    
    ##扩展正则语法
    1.(?Limsux)  模式修正符的应用。自定义模式修正符,可以自由组合
    2.(?:)	取消单元存储功能
    3.(?P<name>)  自定义模式单元的名称 (html标签常用)
    4.(?P=name)	 获取自定义模式单元的名称
    5.(?#)   正则注释内容,解析器不会处理     
    6.(?=)   正向先行断言  (零宽断言)     
    7.(?!)	 负向先行断言  (零宽断言)
    8.(?<=)  正向后行断言  (零宽断言)
    9.(?<!)	 负向后行断言  (零宽断言)
    10.(?(id/name)Y|N)	根据模式单元是否存在决定使用Y的规划(模式单元存在)或者是N的规划(模式单元不存在)   
    

    三、re模块

    ###正则表达式本质是字符串,单独使用没有意义的。正则表达式需要配合正则相关的函数和方法
    
    
    ###步骤
    '''
    #1.导入re模块
    import re
    
    ##search方法:查找符合正则表达式的内容
    
    #2.准备正则表达式
    pattern = r'baidu' (r模式,取消转义字符的意义。比如\,s这些)
    
    #3.正则查找的字符串
    url = 'http://www.baidu.com'
    
    #4.匹配操作
    result = re.search(pattern, url)
    print(result)
    '''
    匹配过程是拿着 pattern到url进行挨个字符串的匹配
    '''
    #结果
    <_sre.SRE_Match object; span=(11, 16), match='baidu'>
    '''
    
    
    ###re模块的方法
    re.compile()
    re.escape()
    re.findall()
    re.finditer()
    re.match()
    re.search()
    re.split()
    re.sub()
    re.subn()
    

    re文档

  • 相关阅读:
    LAMP
    监控和安全运维 1.8 zabbix服务端安装
    监控和安全运维 1.7 nagios配置邮件告警
    易道用车-拿什么说爱你
    unix exec族函数 关于参数的疑惑
    关于 Unix 用户权限及进程权限及 Saved set-user-id
    ANSI C中关于FILE流的一些
    Filco minila 的蛋疼。
    IIS32位,64位模式下切换
    Gvim+Emmet.vim 那些事。
  • 原文地址:https://www.cnblogs.com/michealjy/p/12506164.html
Copyright © 2011-2022 走看看