• 正则表达式


    1、re.match

      语法: re.match(pattern, string, flags=0)

      功能: 在字符串的起始位置匹配一个模式, 符合条件的模式不在起始位置也返回None

    测试字符串:

    restr = '''<div class="viewad-topMeta"><div class="viewad-meta"><div class="viewad-meta-item"><label>货车车型:</label><div class="content"><a class="tag-color" href="/ershougongchengche/m37397/" target="_blank"><span>平板车</span></a></div></div><div class="viewad-meta-item"><label>车型小类:</label><div class="content"><span>平板式</span></div></div><div class="viewad-meta-item"><label>品牌:</label><div class="content"><span>福田</span></div></div></div><section class="viewad-contact"><ul><li class="chat-btn-box"><label>联系:</label><a class="show-contact" id="show-contact" href="javascript:void(0)" data-phone="15333278866" data-vn="0" data-hide-modal="0" target="_self"><div class="icon-warp"><i class="icon-contact"></i></div><div class="contact-text"><div class="text-tit">点击查看完整号码</div><div class="contact-number">1533327****</div></div></a></li><li class="chat-btn-box"><label>其他联系:</label><a class="private-message message-btn disabled" id="pivate-contact" href="javaScript:;"><i class="icon icon-message"></i>私信联系</a><a class="weixin-message message-btn" id="weixin-contact"><i class="icon icon-weixin"></i>微信联系</a><div class="weixin-contact-promo"><div class="close" id="weixin-contact-close">x</div><div class="detail">微信号: 15333278866</div></div><div class="leads-reserve" id="message-back"><img src="//file.baixing.net/201709/20aad4970d568b9584eb12ba6ae486ed.jpg"><a href="//truck.baixing.com/leads/buyer/form?src=web_viewAd">预约回访</a></div></li></ul></section></div>
    '''

    # 字符串开头字符为<div, 如果pattenr位置是div则返回None
    re.match('<div', restr).group() 结果: <div # .* 除换行符 , 之外, 能代表所有字符(匹配的字符为:开始位置--->货车车型) re.match(r'(.*)货车车型',restr).group() 结果: <div class="viewad-topMeta"><div class="viewad-meta"><div class="viewad-meta-item"><label>货车车型

    2、re.search

      语法 :re.search(pattern, string, flags=0)

      功能: 返回第一个成功的匹配

    #group  返回匹配的整个字符串, groups返回 括号中的匹配

    re.search("div", restr).group() # 返回值为第一个div字符串 re.search("div", restr).groups() # 返回值为()
    re.search(r'(.*)class(.*?)class="viewad-meta"', restr).group()
    # 返回值为<div class="viewad-topMeta"><div class="viewad-meta"字符串
    re.search(r'(.*)class(.*?)class="viewad-meta"', restr).groups() 
    # 返回值为(
    '<div ', '="viewad-topMeta"><div ')

    3、re.sub

      语法: re.sub(pattern, repl, string, count=0, flags=0)

      功能: 将字符串string中的pattern替换为repl, 替换次数为count. flags为编译时的匹配模式

    # 将restr字符串中的viewad替换为vvv, 替换2次
    r = re.sub("viewad","vvv",restr, count=2)
    
    # 将restr中的连串数字替换为#####, 替换所有
    r = re.sub(r"d+","#####", restr)

      repl也可以为一个函数

    # 数值 乘 2
    def double(matched):
        return str(int(matched.group("value")) *2)
    
    # 给匹配的数字定义一个组名
    r = re.sub("(?P<value>d+)", double, restr)
    print(r)

    4、re.compile

      语法 :re.compile(pattern[, flags])

      功能 : 编译并生成一个表达式对象,供match和search两个函数使用

      flags:  

        re.I   (IGNORECASE)忽略大小写

        re.L  (LOCALE)表示特殊字符集 w, W, , B, s, S 依赖于当前环境

        re.M (MULTILINE)多行模式

        re.S    . 和换行符集合(任意字符+换行符)

        re.U   表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库

        re.X   为了增加可读性,忽略空格和' # '后面的注释

    # 匹配第一个连续字符串+空格+连续字符串
    pattern = re.compile(r"([a-z]+) ([a-z]+)", re.S) m = pattern.search(restr) print(m.groups()) 结果:('div', 'class')

    5、

  • 相关阅读:
    Windows7在自由的虚拟机(微软官方虚拟机)
    POJ1135_Domino Effect(最短)
    项目优化经验分享(七)敏捷开发
    POJ 3299 Humidex(简单的问题)
    NEFUOJ 500 二分法+最大流量
    json 解析解乱码
    【设计模式】Abstract Factory模式
    汇编语言的应用
    Duanxx的STM32学习:NVIC操作
    PHP移动互联网的发展票据(6)——MySQL召回数据库基础架构[1]
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/11599223.html
Copyright © 2020-2023  润新知