zoukankan      html  css  js  c++  java
  • 正則表達式

    正則表達式的用途能够理解为找出规律同样的一类东西。能够是当中一个,也能够是全部的。

    比如:

    password:hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse

    解密I love you

    解密方法:找规律  xx须要的内容xx

    经常使用符号:点号,星号,问号与括号

         .  :  匹配随意字符。换行符 除外

         * :匹配前一个字符0次或无限次

         ? :匹配前一个字符0次或1

         .*:贪心算法 就像是一个胖子吃尽可能多的东西

       .*?

    :非贪心算法 就像是一个婴儿少量多餐

    ():括号内的数据作为结果返回

    经常用法:findallsearchsub

    findall匹配全部符合规律的内容,返回包括结果的列表
    Search:匹配并提取第一个符合规律的内容,返回一个正則表達式对象(object)
    Sub:替换符合规律的内容。返回替换后的值

    经常使用技巧
    import re #这是指导入正則表達式的库文件
    1. . 的使用
    a = 'xyz123'
    b = re.findall('x.',a)
    print b
    #输出是xy
    a = 'xyz123'
    b = re.findall('x..',a)
    print b
    #输出是xyz
    #因此我们能够把.理解为占位符

    2.*的使用 匹配前一个字符0次或无限次
    a = 'xyxy123'
    b = re.findall('x*',a)
    print b
    #['x','','x','','','','','']注意,最后面多了一个空
    #*匹配前一个元素0次或多次。如果匹配0次,那么'x*'就仅仅剩下'x',那么就会在a字符串里面寻找x,在第一、第三位置。找不到就是空
    #留给大家一个问题。为什么最后面会多一个‘’,知道的请在后面评论中写下。由于我并不知道<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" />
    3.?的使用 匹配前一个字符0次或1
    a = 'xy123'
    b = re.findall('x?',a)
    print b
    #['x','','','','','']注意,这里也跟上面一样。最后面多了一个''
    #由于?匹配前面一个元素0次或1次。当匹配1次时,'x?'就变成‘x’,那么会去a中找x,找不到就为空
    
    由于单个用的并不多。仅仅需掌握(.*?)这样的组合方式
    1.先看一下.*的搭配
    secret_code = hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse
    b = re.findall('xx.*xx',secret_code)
    print b
    #['xxIxxfasdjifjal34xxlovexx23345sdfxxyouxx']
    #像一个胖子尽可能的多吃
    
    2..*?的使用
    c = re.findall('xx.*?

    xx',secret_code) print c #['xxIxx','xxlovexx','xxyouxx'] #首先要满足条件,然后尽可能多的找满足条件的组合,即‘少量多餐’


    接下来就是重点()的使用
    d = re,findall('xx(.*?)xx'.secret_code)
    print d
    for each in d:
       print each
    #['I','love','you']
    #I love you,课件()能够返回我们须要的内容,而不包括多余的元素

    然后
    1.介绍一下re.S的使用

    s = '''sdfxxhello
    xxfsdfxxworldxxasdf'''
    
    d = re.findall('xx(.*?)xx',s,re.S)
    print d
    #当去掉re.S 时会打印['fsdf'] 由于.不能匹配
    
    #加上re.S则['hello
    ','world'],因此我们知道。re.S就是让点的作用范围能包含
    
    能够去Python正則表達式的库文件里查找对S的定义

    接下来
    2.对照findall和search的差别
    s2 = 'asdfxxIxx123xxlovexxdfd'
    f = re.search('xx(.*?)xx123xx(.*?

    )xx',s2).group(1) print f #I #假设是2,love f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2) print f2[0][1]

    #love
    #自己能够调试来理解,f2是个队列,有一个元素,可是这个元素是个元组,仅仅有当非常长的字符串,有两个地方满足规律时。才会有两个元素

    3.sub举例
    s = '123asdfga123'
    output = re.sub('123(.*?)123','123789123',s)
    print output
    #123789123
    或者
    output =  re.sub('123(.*?)123','123%d123'%789,s)
    #123789123,%d相似于C语言
    #re.sub的作用是在原字符串中匹配符合规律的内容,然后替换

    经常使用技巧
    import re
    from re import *
    from re import findall,search,sub,S 这时,能够在表达式中省略re,可是不推荐,由于非常难读懂
    不要用compile 多此一举。由于findall的定义中就包括
    使用d+匹配纯数字
    a = 'asd123456ahdga'
    b = re.findall('(d+)',a)
    print b
    #'123456'
    a = 'sda123456adh555afkj'
    b = re.findall('(d+)',a)
    print b
    #'123456','555'
















  • 相关阅读:
    异常:Batch update returned unexpected row count from update [0]; actual row count: 0;
    python UI/API 环境配置
    selenium xpath定位
    python webdriver 的安装与下载
    python面试题
    fiddler工具使用及手机抓包
    jmeter 常用函数
    Jmeter常用插件——Stepping Thread Group ,JMETER以及关于数据库性能分析
    Jmeter Monitor监控
    python 常用快捷键
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6927076.html
Copyright © 2011-2022 走看看