zoukankan      html  css  js  c++  java
  • 正则表达式&re模块

    正则表达式:
    功能:字符串模糊匹配查询
    元字符:. ,^, $, *, +, ?, {}, [ ],| ( ),
    • . 通配符点:匹配除换行符以外的任意一个符号
    • ^:只匹配字符串的开始位置
    • $:只匹配字符串的末尾位置
    • *: 重复(0,+∞)
    • +:重复 [1,+∞)
    • ?:重复 [0,1]
    • {}:重复指定次数{m,n}
    :转义符
         转义符跟元字符,元字符变普通符号
         转义符加普通符号,有特殊含义
    • d  0-9任意数字
    • D  非数字
    • w 任意字母数字 [azAZ0-9-]
    • W 非数字字母
    • s  空格
    •   匹配特色字符边界,比如空格,&,#等
    在assic码里是响铃符
    >>> re.findall(r'c\l','abcle')
    ['c\l']
    >>> re.findall('c\\l','abcle')
    ['c\l']
    >>> re.findall('c\l','abcle')
    ['c\l']
    >>> 
     
    [ ]字符集:多选一,“或”
    字符集中只有三个特殊符号: - ^  
    • - :表示范围
    • ^:取反
    • :转义符依然有效
    管道符:|  或
    re.findall('-?d+.?d*','234,-45,8.9,-7.9,6')
     
    贪婪匹配:按规则尽可能多多匹配内容
    >>> import re
    >>> res=re.findall('abc+','abcccccdvd')
    >>> print(res)
    ['abccccc']
    非贪婪模式:在规则后加’?’ 切换成非贪婪模式,在该模式下,按着最小重复数匹配

    s="<div>yuan<img></div><a href=""></div>"
    #
    # ret=re.findall("<div>.*?</div>",s) # <div>yuan<img></div><a href=></div>
    # print(ret)

    # ret=re.search("<div>.*?</div>",s) # <div>yuan<img></div><a href=></div>
    # print(ret)

    几个常用的非贪婪匹配Pattern
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复
    .*?的用法:
    --------------------------------
    
    . 是任意字符
    * 是取 0 至 无限长度
    ? 是非贪婪模式。
    何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
    .*?a
    
    就是取前面任意长度的字符,到底一个 a 出现
     
    Re模块
    ():
    分组
      分组后查找后只显示分组里的内容
      显示全部的内容在分组括号里加上’?:’
    有名分组:
     res=re.search('(?P<year>20d{2})-(?P<mouth>[01]d)','2014-08')
    >>> res.group('year')
    '2014'
    >>> res.group('mouth')
    '08'

    re.findall(pattern, str,flag)

    ===>结果是个列表
    ===>优先筛选(分组的情况)
     
    Re.search(pattern, str,flag)
    ==>只匹配第一个符合条件
    ==>匹配成功,返回对象。匹配失败,返回None
     
    Re.match(pattern, str,flag)
    ==>只从开始位置匹配符合条件
    ==>匹配成功,返回对象。匹配失败,返回None
     
    re.split(pattern,str,max)
    Max:最大分割次数
     
    re.compile(pattern,flag)编译 返回一个可调用的对象
     obj=re.compile("d+") ret=obj.findall("akhsd4325asdk43")   #  re.findall("d+","") print(ret)

    Re.finditer( )  返回迭代器对象

    # ret=re.finditer("d+","dasfjk324khk4234kj234hkj234hkj234kj234k2j34hk2j3h4")
    # print(ret)
    #
    # print(next(ret).group())
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    营山护照办理
    非北京人员 办理护照
    护照填写注意事项
    美国会议签证——我是正当理由去美国,我能支付(或有人为我支付)我在美国期间的所有费用,办完事我肯定回来, 邀请信,行程表这些材料齐全即可
    urllib2使用2
    python 异常
    python urllib和urllib2 区别
    python类继承
    gcc编译4个阶段
    Vim中如何全选并复制?
  • 原文地址:https://www.cnblogs.com/mona524/p/7085982.html
Copyright © 2011-2022 走看看