zoukankan      html  css  js  c++  java
  • python re正则表达式

    python的正则表达式库re
     
    正则的常用符号
    .     匹配任一字符,换行符 除外
    *     匹配前一个字符0次或无限次
    ?     匹配前一个字符0次或1次
    .*     贪心算法(尽可能多的匹配)
    .*?     非贪心算法(尽可能少的匹配)
    ()     括号内的数据作为结果返回
     
    以下简单介绍几个主要函数的用法
     
    re.match
    说明:从字符串的第一个位置开始匹配,匹配到返回,m =re.match("正则表达式",字符串))
    import re
    m = re.match('"goUrl":"([^"]*)"',response)
    print(m.group(0),m.group(1))
    print(m.groups())
    解释:re.match()中第一个参数为要匹配的正则表达式(正则表达式用单双引号括起来,但是如果里面本身包含双引号,可以用单引号括起来),第二个为要提取的原始文件字符串。
    group(0)为提取到的包含goUrl的全部正则内容。group(1)为正则表达式第一个括号内的内容,当然也可以有两个括号,那就用group(2)来返回,groups()返回一个元祖,所有括号内的内容
    match取到一个字符串后返回
     
    re.search
    说明:在整个字符串中匹配到第一个正则后返回数据,返回一个正则表达是对象(object)
    import re
    m = re.search('"goUrl":"([^"]*)"',response)
    print(m.group(0),m.group(1))
    与match的区别:match是从字符串开始进行匹配;search是从字符串的任何部分开始匹配
    search也是最多匹配到一个字符串,然后就退出了,group用法与match一样
     
    re.findall
    说明:返回字符串中满足正则表达式的所有字符串。返回结果是一个列表[]
    import re
    m = re.findall('"goUrl":"([^"]*)"',response)
    print(m)
    解释:正则也可以用(),然后列表中的每一个子项,可以用group()来取出来括号内的内容
     
    re.compile
    说明:将经常使用的正则表达式编译成一个正则表达式对象,使用更方便
    import re
    m = re.compile('"goUrl":"([^"]*)"')
    print(m.findall(response))
    print(m.search(response))
    print(m.match(response))
    解释:使用compile与单独使用findall等操作是一样的
     
    re.sub
    说明:将匹配到正则的所有字符串替换为另一个字符串,返回结果是一个字符串
    import re
    m = re.sub("正则表达式","要替换的内容",源文件)
    print(m.findall(response)
     
    注意:要替换的内容可以用("%d"%789)来通过外部参数替换要替换的内容
     
    re.split
    说明:按照正则进行分割,返回一个列表(列表内容不包含分隔符)
    import re
    m = re.split("正则表达式分隔符",源文件)
    print(m)
    re.split和python的split的区别:
    1.如果分割符是固定字符串,两个可以混用。re.split("goUrl",response)等价于response.split("goUrl")
    2.re.split可以用正则表达式分割,比如re.split("[0-9]*",response),而python的split只能用string类型的字符串分割。
     
    re.S
    说明:是一个参数,多行匹配。如果不用re.S则在单行中进行匹配,如果用了re.S则在整体中进行字符匹配
     
    re.M
    说明:是一个参数,^$标志将会匹配每一行。默认情况下是只匹配符合正则的第一行和最后一行
     
    一些小技巧:
    1.先抓大再抓小
    例子a.html如下:
    <div class="topic"><a href="xxx"></a>
         <div class="list">
              <ul>
                    <li><a href="xxx/1.html">这是第一条</a></li>
                    <li><a href="xxx/1.html">这是第二条</a></li>
                    <li><a href="xxx/1.html">这是第三条</a></li>
              </ul>
         </div>
    </div>
    想要抓出这是第一条、这是第二条、这是第三条;如果用'>(.*?)</a>'会抓取到第一行。这时就可以先抓大再抓小,即读取到<ul>,然后再获得下面的'></a>'的内容
    text_fied=re.findall('<url>(.*?)</ul>'),a.html
     
    更多关于re的操作可以参照官网:https://docs.python.org/3.1/library/re.html
  • 相关阅读:
    如何在iTerm2中配置oh my zsh?
    sublime中格式化jsx文件
    ES6 new syntax of Literal
    ES6 new syntax of Rest and Spread Operators
    How to preview html file in our browser at sublime text?
    ES6 new syntax of Default Function Parameters
    ES6 new syntax of Arrow Function
    七牛云2018春招笔试题
    Spring-使用注解开发(十二)
    Spring-声明式事物(十一)
  • 原文地址:https://www.cnblogs.com/meitian/p/5241904.html
Copyright © 2011-2022 走看看