zoukankan      html  css  js  c++  java
  • Python -- 正则表达式 regular expression

    正则表达式(regular expression)

          作用:用来匹配字符串。  

          设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,就认为它“匹配”了,否则,该字符串就是不合法的。

          格式:正则表达式也是用字符串表示的,注意:带引号

    re.split(pattern=,string)  #切分字符串
    re.match(pattern,string)   #匹配
    re.compile(pattern=).match(string)  #先编译,再匹配
    re.match().groups()  #返回子串元组格式,注意这里是groups,加了s,下面的没有加s
    re.match().group(0)   #返回原字符串
    re.match().group(1)   #返回第1个子串
    re.match().group(2)   #返回第2个子串
    #贪婪匹配问题:加个?即可

    regular expression,re模块

    防 止 转 义:使用Python的r前缀,就不用考虑转义的问题

    匹          配:re.match(pattern, string) :判断是否匹配,匹配成功返回一个match对象;否则返回                        None。

    切分字符串re.split(格式,字符串 )方法

    贪 婪 匹 配正则表达式默认是贪婪匹配,也就是匹配尽可能多的字符。

    分          组:正则表达式还能提取子串,格式:用()表示的就是要提取的分组 group

    替          换:re.sub(原来的内容,替换后的,需要替换的字符串)  re.sub("d","-","chuan1zhi2") 表示把这个字符串里的数字替换为-

    预编译 

       在Python中使用正则表达式时,re模块内部会做两件事情:

     1、编译正则表达式,如果正则表达式的字符串不合法,就会报错;

     2、用编译后的正则表达式去匹配字符串。

    re.compile(pattern=).match(string).groups()

    例子:

    1,https://www.bilibili.com/video/BV1Lx411d7Cj?p=24 , 13:21秒讲的例子很好

    re模块中常用方法:

    #下面的string是指被替换的原始字符串
    
    re.match(  )
    
    re.search(pattern, string , flags=0 )   #在全文中匹配一次,匹配到就返回
    
    re.findall(pattern, string, start, end)  #在整个字符串中搜索所有符合正则表达式的字符串,匹配所有返回一个列表
    
    re.sub(pattern1, pattern2, string,  count, flags  )  # 将模式pattern1替换为pattern2
    
    re.subn(pattern1, pattern2, string )  #实现目标的搜索和替换,同时还会以元组形式返回被替换的次数
    
    re.split(pattern, string )    #分割字符串,结果以列表List形式返回

     re.match方法使用标志位flags的情况:

    flags可选标志位:  如果同时使用多个标志位,使用“ | ”分割。比如re.I | re.M

    修饰符 描述 备注
    re.I 使匹配对大小写不敏感  
    re.S 使.匹配包括换行在内的所有字符  
    re.L 做本地化识别(local-aware)匹配  
    re.M 多行匹配,影响^和$  
    re.U 根据Unicode字符集解析字符。这个标志影响w, W, , B  
         

    格式 作用 备注
    d 匹配一个数字 [0-9]  digit
    D 匹配非数字  
    w 匹配单词字符,即a-z,A-Z,0-9,_ word 
    W 匹配非单词字符  
    s 匹配一个空格, , , , f, v,空白,Tab键  space
    S 匹配非空白,除空格、tab键之类的  
    . 匹配任意字符,但不包含换行符' ';但是在DOTALL模式中可以匹配换行符。

     'py.'可以匹配'pyc', 'pyo', 'py!'

    re.findall("."," ",re.DOTALL) 或re.findall("."," ",re.S),re.DOTALL可以简写为re.S

    * 匹配前一个字符0个到任意个  
    + 匹配前一个字符1个到任意个  
    匹配前一个字符0个到1个  
    {n} 匹配前一个字符n次  
    {n,} 匹配前一个字符至少n次  
    {n,m}, {min, max} 匹配前一个字符n到m次,n个,n+1个……m个 n=<字符个数<=m
    [0-9a-zA-Z\_] 匹配一个字符,限定范围中的任意类型都可以 字符个数=1,并不是匹配每种类型一个;不能为0个,空字符串会报错
    [0-9a-zA-Z\_]+ 至少有一个字符,限定范围中的任意类型都可以 字符个数>=1
    [0-9a-zA-Z\_]* 任意个字符(包含0个),限定范围中的任意类型都可以 字符个数>=0,只是比+表示的字符多了一个0
    [0-9a-zA-Z\_]? 0个或1个字符,限定范围中的任意类型都可以 字符个数=0个,1个
    [a-zA-Z\_][0-9a-zA-Z\_]* 匹配由字母或下划线开头,后接任意个字符,限定范围中的任意类型都可以  
    [a-zA-Z\_][0-9a-zA-Z\_]{0,19} 更精确地限制了变量的长度,前半部分只匹配一个字符,{0,19}是限定后半部分字符的长度 所以总的字符长度是1+{0,19}={1,20}
    ^ 表示行的开头 ^d,表示必须以数字开头
    $ 表示行的结束 d$,表示必须以数字结尾
    A|B 可以匹配A或B (P|p)ython可以匹配'Python' 或'python'
    re模块的match方法 匹配字符串  
    re模块的split方法 切分字符串  
    re模块的group方法,groups方法 返回匹配结果,group返回原字符串,groups返回子串元组  
  • 相关阅读:
    Android酷炫实用的开源框架(UI框架)
    The official raywenderlich.com Objective-C style guide.
    mac os 利用ssh 搭建git server服务器详细教程,以及git基本用法
    创建者模式
    工厂模式之我见
    设计模式的学习
    MSSQL基础
    Ini文件帮助类
    Nuget的使用
    Oracle批量执行脚本文件
  • 原文地址:https://www.cnblogs.com/bravesunforever/p/10520269.html
Copyright © 2011-2022 走看看