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返回子串元组  
  • 相关阅读:
    trackr: An AngularJS app with a Java 8 backend – Part III
    trackr: An AngularJS app with a Java 8 backend – Part II
    21. Wireless tools (无线工具 5个)
    20. Web proxies (网页代理 4个)
    19. Rootkit detectors (隐形工具包检测器 5个)
    18. Fuzzers (模糊测试器 4个)
    16. Antimalware (反病毒 3个)
    17. Debuggers (调试器 5个)
    15. Password auditing (密码审核 12个)
    14. Encryption tools (加密工具 8个)
  • 原文地址:https://www.cnblogs.com/bravesunforever/p/10520269.html
Copyright © 2011-2022 走看看