zoukankan      html  css  js  c++  java
  • python入门之正则表达式

    正则

      通过re模块实现

      eg:>>>import re

              >>>re.findall('abc',str_name)

      在strname里面完全匹配字符串abc,返回列表['abc'],有多个则返回多个相同的元素,若没有,则返回空列表。优先取出组里面的内容,在小括号开头加上?:就可以去掉优先获取组里内容的权限

    元字符

      .  表示匹配单个字符,除了换行符

        re.findall('a.c',djsdsdabcdw')返回列表的元素为abc

      ^  表示以什么开头

        re.findall('^abc','abcoweijdw')返回列表的元素为abc

      $  表示以什么结尾

        re.findall('abc$','elkjfwlabc')返回列表的元素为abc

      *  表示匹配前一个字符零到多次

        re.findall('abc*','efwkabcccccclo')也可以匹配到ab,贪婪匹配,匹配最多次

      +  表示匹配前一个字符一到多次

        re.findall('abc+','sdfabcccdcw')不能匹配到ab,至少匹配到abc

      ?  表示匹配前一个字符零次和一次

        re.findall('abc?','sdabcewwabsef')返回的列表元素是ab和abc

      {}  表示匹配前一个字符n次,数字n放在括号里

        abc{3}只能匹配abccc,也可以写区间{3,5},匹配前面的内容3到5次

        后跟元字符,则去除元字符的特殊功能

         后边跟普通字符,则实现特殊功能

        d 任何十进制数,同[0-9]

        D 同[^0-9]

        s 匹配任何空白字符,同[ fv]

        S 与s相反

        w 同[a-zA-Z0-9]

        W 与w相反

         匹配单词边界,分割与特殊字符之间的地方

    字符集

      [ ]  a[bc]d 只能匹配abd和acd

         [a-z] [A-Z] [1-9]

      ^  [^1-9] 匹配除了1到9的字符

      ()  (ab)* 匹配ab字符串 零个到多个

      |  或

    函数

      re.search('abc','sefabcsefwabc').group()

        只匹配找到的第一个满足的字符串返回,后面就不匹配了,返回的并不是列表,是字符串

      re.findall(r"a(d+)","a4394dfgr)

        匹配括号里的,返回4394

      re.search(r"a(d+)","a4394dfgr").group()

        贪婪匹配,返回a4394

      re.search(r"a(d+?)","a4394dfgr").group()

        非贪婪匹配,返回a4

        可将+换成*。另外括号后面有个限制条件,如a(d+?)b,这样非贪婪匹配就不起作用了,有无?都是一样的

      re.match(被匹配字符串,匹配字符串,flag)

        其中,flag常用取值:

          re.I 不区分大小写

          re.S 使.匹配包括换行符在内的所有字符

        match匹配到的是一个match对象,需要用group()方法去取匹配的字符串,参数默认为0,取匹配到所有的内容,若是n,则返回第n个组的内容,也就是第n个小括号里匹配到的内容

        groups()方法获取组里的内容,返回一个元组,一个组里的内容就是元组的一个元素

        groupdict()方法,在组内开头加上 ?P<"asdfa">,就能返回一个字典,由自己定义的键“asdfa”和组的内容组成键值对

        start() 返回匹配开始的位置

        end() 返回结束位置

        span() 返回一个元组,包含匹配的开始和结束的位置

      re.sub(被替换的字符串,替换成此字符串,str_name,替换次数)

      re.subn(被替换的字符串,替换成此字符串,str_name)

        此方法匹配到的全部替换,在返回的列表最后加一个元素,这个元素是替换的次数

      re.compile()定义一种匹配规则,用来多次调用

        eg:

          regex = re.compile(r'w*oow*')

          print regex.findall(str_name)

    实例:

      取算数表达式里最里面的小括号表达式,括号里没有括号的表达式

      re.search("([^()])",表达式).group()

        若最里面有多个小括号表达式,则要加*

        re.search("([^()]*)",表达式).group()

      

      匹配一个数,可整型,可浮点型,可1位数,可多位数

      'd+.?d*'

        前面必须为+,至少是一位的数,那么后面必须是*,可为0次,若还是为+,则后面至少还是有一位的,那么整体就至少是二位的数了,中间的?表示匹配浮点型或者不是

      

      两个数运算的表达式

      'd+.?d*([*/]|**)d+.?d*'

        其中,[*/]|**表示乘除幂运算

      匹配ip地址

      "([01]?d?d|2[0-4]d|25[0-5].){3}([01]?d?d|2[0-4]d|25[0-5])"

        其中,[01]?d?d|2[0-4]d|25[0-5] 表示从0到199,200到249,250到255

    补充:

      re.split("\\","abcxyz")

        后面的字符串中的在python里面需要转义,其实是\,所以分割的话,需要用两个,而需要的两个又是需要转义的,所以就是\\

      re.split(r"\","abcxyz")

        前面被匹配的字符串中如果有各种转义字符,会先去python自己里面查看有没有(其中d没在,其他字符在ASCII里面都有对应的数字),有的话,就按python里对应字符来匹配(若不想按python里面的字符匹配,则前面加一个,或者在整个匹配字符串前面加一个r),如果没有,就按re模块里定义的特殊功能来匹配(例如d,可以不用另外加或者加r,但是尽量加上,按照正确格式来)

  • 相关阅读:
    Android Interactive Animation
    Android 笔记
    java 从零开始 第三天
    RGB颜色查询对照表
    Android TextView文字过多时通过滚动条显示多余内容
    Android系统字体规范
    Android 动画之TranslateAnimation应用详解
    Python--day69--ORM的F查询和Q查询
    Python--day69--ORM聚合查询和分组查询
    Python--day69--ORM正反向查找(外键)
  • 原文地址:https://www.cnblogs.com/chy-op/p/9992434.html
Copyright © 2011-2022 走看看