美文网首页
Re库(正则表达式)熟悉

Re库(正则表达式)熟悉

作者: Wangthirteen | 来源:发表于2018-11-14 22:50 被阅读102次

    正则表达式是处理字符串的强大工具,主要用于检索、查找、替换,在爬虫里主要用于解析HTML页面信息。
    1.正则表达式模式

    \w 匹配字母,数据及下划线
    \W 匹配不是字母,数据及下划线
    \s 匹配任意空白字符,等价于[\t\n\f]
    \S 匹配任意非空字符
    \d 匹配任意数据,等价于[0-9]
    \D 匹配任意非数字字符
    \A 匹配字符串开头
    \Z 匹配字符串结尾,如果存在换行,只匹配到换行前结束的字符串
    \z 匹配字符串结尾,如果存在换行,还会匹配换行后的字符串
    \G 匹配最后匹配完成的位置
    \n 匹配一个换行符
    \t 匹配一个制表符
    ^ 匹配一行字符串的开头
    ? 匹配0个或1个前面的表达式定义的片段,非贪婪
    $ 匹配一行字符串的结尾
    . 匹配任意字符串,除了换行符
    [...] 用来表示一组字符,单独列出 比如[amk] 匹配a、m、k
    [^...] 不在[ ]中的字符 比如[^abc] 表示匹配除了a、b、c 之外的字符
    {n} 精确匹配n个前面的表达式
    {n,m} 匹配n到m次前面表达式定义的内容,贪婪方式
    a|b 匹配a或b
    ( ) 匹配括号内的表达式,也表示组

    2.常用函数

    • re.match

    尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None(简单来说就是从起始位置开始匹配,不管最后成不成功只要起始位置没有匹配成功就返回 None)
    re.match(pattern, string, flags=0)
    pattern 匹配的正则表达式
    string 要匹配的字符串。
    flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等

    • re.search

    re.search 扫描整个字符串并返回第一个成功的匹配(很好理解~~~)
    re.search(pattern, string, flags=0)
    pattern 匹配的正则表达式
    string 要匹配的字符串。
    flags 标志位
    匹配成功re.search方法return一个匹配的对象,否则返回None。

    -re.match与re.search的区别

    1.re.match只匹配字符串的开始,如果字开始匹配失败,函数返回None
    2.而re.search匹配整个字符串,直到匹配成功

    • re.sub

    主要用于部分字符串的替换
    re.sub(pattern, repl, string, count=0, flags=0)
    pattern : 正则中的模式字符串。
    repl : 替换的字符串,也可为一个函数,如果去电的话 可以为空。
    string : 要被查找替换的原始字符串。
    count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
    content = re .sub (’\d+',”, content) 去掉content中的所有数字

    • re.compile

    该将正则表达式编译成一个正则表达式对象,以便复用(就是相当于我把规则定义出来,以后想用到同样的规则,只要调用就好了)给正则表达式做了一层封装,以使我们更好地复用
    compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
    re.compile(pattern[, flags])
    pattern : 一个字符串形式的正则表达式
    flags (修饰符): 可选,表示匹配模式

    修饰符

    1.re.I 忽略大小写
    2.re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    3.re.M 多行模式
    4.re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
    5.re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    6.re.X 为了增加可读性,忽略空格和 # 后面的注释
    7.网页匹配中常用的是 re.S re.I

    • re.findall

    在字符串中查找正则表达式匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表,列表的里的每个元素都是元祖,可以用索引取出
    findall(string[pos[, endpos]])
    string : 待匹配的字符串。
    pos : 可选参数,指定字符串的起始位置,默认为 0。
    endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度

    • re.finditer

    返回一个迭代器类型,里面包含所有符合表达式的值,循环遍历输出每个值

    it=re.finditer(pattern, string, flags=0)
        for match in it:
            print (match.group())
    
    • re.split

    按照能够匹配的子串将字符串分割后,return列表类型
    re.split(pattern, string[, maxsplit=0, flags=0])
    re.split('\W+', 'runoob, runoob, runoob.')
    ['runoob', 'runoob', 'runoob', '']
    另外对于一个匹配失败的子串,split不会出现分割

    • 贪婪模式
    String str="abcaxc";
    Patter p="ab.*c";
    

    正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配,也就是匹配ab到c之间所有满足条件的字符串。abcaxc(ab.*c)

    • 非贪婪匹配
    String str="abcaxc";
    Patter p="ab.*c";
    

    尽量少匹配,匹配ab到c之间满足条件的第一个子串。abc(ab.*c)

    • 如何区分贪婪模式和非贪婪模式

    默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式
    量词:{m,n}:m到n个
    1.*:任意多个
    2.+:一个到多个
    3.?:0或一个

    • 通用匹配

    将中间部分直接省略,全部用 .* 来代替或者 .?
    result = re.match (’'Hello.
    Demo$', content) .group()
    Hello 123 4567 World This is a Regex Demo

    • 其他

    1.函数.span() 返回匹配范围
    2.函数.start 开始位置 .
    3.函数.end 结束位置
    4.函数.group() 输出匹配结果
    5.函数.group(1)取出匹配的一个字符,里面加索引

    详细的正则表达式手册传送门→正则表达式手册
    正则表达式文档传送门→正则表达式文档

    相关文章

      网友评论

          本文标题:Re库(正则表达式)熟悉

          本文链接:https://www.haomeiwen.com/subject/fzejfqtx.html