• 正则表达式与re模块


    一,正则表达式(http://tool.chinaz.com/regex/

    正则表达式本身与python没什么关系,就是匹配字符串内容的一种规则,只和字符串相关。

    定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特殊字符的组合,组合一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    1,字符组,[字符组],在同一位置可能出现的各种字符组成一个字符组,在在正则表达式中用[]表示。

    2,元字符:. , 匹配除换行符以外的任意字符

          w,匹配字符或数字或下划线,W,匹配非字母或下划线或数字

          s,匹配任意空白字符,S,匹配非空白字符

          d,匹配数字,         D,匹配非数字

          ,匹配一个换行符, ,匹配一个制表符,,匹配一个单词的结尾

          ^,匹配字符串的开始,$,匹配字符串的结尾,a|b,匹配字符a或字符b

          (),匹配括号内表达式,也表达一个组

          [...],匹配字符组中的字符,[^...],匹配除了字符组中字符的所有字符

    3,量词

    *,+,?,{n},{n,},{n,m},默认情况下,采用贪婪匹配。尽可能匹配长的字符串。

    在量词后面加?,就是非贪婪匹配,尽可能匹配短的字符串。

    转义符,python中,在字符串前加r,例r“d”

      .*?的用法:.*?x,就是取前面任意长度的字符,直到一个x出现

    二,re模块

    re模块下的常用方法

    import re
    # ret=re.findall("s","she is girs")   #返回所有满足匹配条件的结果,放在列表里
    # print(ret)
    # ret=re.search("s","zhe is girs").group() #函数会在字符串内查找,只找到第一个匹配,就返回一个包含信息的对象,该对象可以
    # print(ret)                               #通过调用group()方法得到匹配的字符串,如果没有,则返回None,调用group会报错
    # ret=re.match("a","zhe is girs")          #和search一样,但在字符串开始处匹配,匹配不到,就没有,报错
    # print(ret.group())
    # ret=re.split("[ab]","abdf")   #先按"a"分割得到""和"bdf",再对""和"bdf"分别按"b"分割,结果['', '', 'df']
    # print(ret)                     #如果不加中括号,则按"ab"分割,结果['', 'df']
    # ret=re.subn("d","r","we1rer23g4")   #将数字替换成"r",返回元组(替换的结果,替换了多少次(可设置))
    # print(ret)
    # see=re.compile("d{3}")            #将正则表达式编译成为一个正则表达式对象,规则要匹配的3个数字
    # ret=see.search("asd34r345rr")
    # print(ret.group())                    #345
    # ret=see.sub("d","r","we1rer23g4",1)            #将数字替换成"r",参数1表示只替换一个
    # print(ret)
    # ret=re.finditer("d","da3gf4h4")           #finditer返回一个存放匹配结果的迭代器
    # print(ret)               #<callable_iterator object at 0x000000A9CF8800F0>
    # print(next(ret).group())
    # print(next(ret).group())
    # print([i.group()for i in ret])
    # for i in ret:
    #     print(i.group())

    优先级

    #findall的优先级
    # ret=re.findall("www.(biadu|oldboy).com","www.oldboy.com")
    # print(ret)         #['oldboy']      这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
    #
    # ret=re.findall("www.(?:biadu|oldboy).com","www.oldboy.com")
    # print(ret)         #['www.oldboy.com']
    
    
    # split的优先级
    # ret=re.split("d","eva4your3yuan2she")
    # print(ret)       #['eva', 'your', 'yuan', 'she']
    # ret=re.split("(d)","eva4your3yuan2she")
    # print(ret)       #['eva', '4', 'your', '3', 'yuan', '2', 'she']
    # #在匹配部分加上()之后所切出来结果是不同的
    # #没有()的没有保留所匹配的项,但有()的可以保留匹配的项

          

  • 相关阅读:
    python class 的属性
    程序员7年和我的7点感想――我的程序人生
    LCD 调试总结 [转]
    shell sed 替换某行内容
    msm 模拟i2c使用过程分析
    高通平台USB host协议分析 之 一
    Linux文件查找命令find,xargs详述
    (翻译)Android属性系统
    内存对齐.结构体对齐
    python class 用法
  • 原文地址:https://www.cnblogs.com/glf1160/p/8252899.html
Copyright © 2020-2023  润新知