zoukankan      html  css  js  c++  java
  • python 爬虫之-- 正则表达式

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

    正则表达式非python独有,python 提供了正则表达式的接口,re模块

    一、正则匹配字符简介

    模式 描述
    d 匹配数字
    D 匹配非数字
    w 匹配字母数字及下划线
    W 匹配非字母数字下划线
    s 匹配任意空白字符
    A 匹配字符串开始
     匹配字符串结束,如果存在换行,只匹配到换行前最后一个字符串
    z 匹配字符串结束
    G 匹配最后匹配完成的位置
    匹配换行符
    匹配制表符
    ^ 从字符串的开头匹配
    $ 匹配到字符串的末尾
    . 匹配任意字符,换行符除外,但是当re.DOTALL标记被指定时,则可以匹配任意字符
    [...]  用来表示一组字符,例:[abc]匹配'a','b','c'
     [^...]  匹配不存在[]中的字符,例[^abc],匹配a,b,c之外的字符
     *  匹配0个或多个的表达式
     +  匹配一个或多个的表达式
     ?  匹配0个或1个有前面的正则表达式定义的片段,非贪婪方式
    {n} 精确匹配n个前面表达式
    {n,m} 匹配n到mci由前面的正则表达式定义的片段,贪婪方式
    a|b 匹配a或者b
    () 匹配括号内的表达式,也表示一个组(match,search)

    二、re模块常用的一些方法

    re.match(pattern,content,flags)

    pattern:匹配规则

    content:要匹配的字符串

    flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

    返回结果:匹配到则返回一个match对象,匹配失败返回None

    获取对象方法

    group(n): 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

    groups():返回一个包含所有小组字符串的元组

    span():匹配的起始到结束位置

    局限性:1.match方法是从字符串起始位置开始进行匹配,若是起始位置匹配不到则直接结束

        2.match 方法匹配到内容后就结束匹配,无法获取多个

    实例如下:

    import re
    
    content="abc123abc234"
    result = re.match('abc[0-9]+',content) #从开头匹配
    result1 = re.match('bc[0-9]+',content) #不从开头匹配
    print 'result=',result.group()
    print 'result1=',result1

    结果:

    result= abc123
    result1= None

     实例中的abc[0-9]类型,应该有多个,但是因为match 匹配到就直接结束,导致只有一个结果返回,并且result1 由于并不是从开头进行匹配,所以没有结果返回

    re.search(pattern,content,flags=0)

    与match 相比,search的主要区别是扫描整个字符串去匹配目标。匹配成功后返回

    实例如下

    import re
    
    content="abc123abc234"
    result = re.search('abc[0-9]+',content) #从开头匹配
    result1 = re.search('bc[0-9]+',content) #不从开头匹配
    print 'result=',result.group()
    print 'result1=',result1.group()

    结果如下

    result= abc123
    result1= bc123

    re.sub(pattern,repl,content,count)

    pattern:匹配规则

    repl:替换的字符串,也可以为一个函数

    content:要被替换查找的字符串

    count:替换的次数,默认替换全部

    实例

    import re
    
    content="abc123abc234"
    result = re.sub('(abc)','',content,1) #删除abc字符串1次
    result1 = re.sub('(abc)','',content) #删除全部abc字符串
    print 'result=',result
    print 'result1=',result1

    结果

    result= 123abc234
    result1= 123234

    实例

    import re
    def double(match):
        vaule = int(match.group())
        return str(vaule*2)
    content="abc123abc234"
    result = re.sub('([0-9])',double,content) #将字符串的数字乘以2
    print 'result=',result

    结果

    result= abc246abc468

    re.findall(pattern,content,flags=0)

    findall 方法与search的主要差别在与findall 能查找出所有与之匹配的字符串

    实例

    import re
    
    content="abc123abc234"
    result = re.findall('([0-9]+)',content) #匹配数字
    print 'result=',result

    结果

    result= ['123', '234']

    以上就是python正则表达式常用的一些方法,以及正则表达是中常用的一些匹配规则

  • 相关阅读:
    arr.forEach()与for...in的用法举例
    git
    hql查询
    JAVA Hibernate工作原理及为什么要用
    mysql中key 、primary key 、unique key 与index区别
    aop
    hibernate json数据死循环
    nginx 转帖
    Maven搭建web项目
    ajaxfileupload 附加参数
  • 原文地址:https://www.cnblogs.com/gj5379/p/8479921.html
Copyright © 2011-2022 走看看