• 正则表达式之匹配模式


    正则表达式(五)

      匹配模式

      匹配模式是指匹配时使用的规则。设定特定的模式,可能会改变对正则表达式的识别,也可能会改变正则表达式中的字符的匹配规定。常用匹配模式有:不区分大小写模式、单行模式、多行模式、注释模式。

      不区分大小写模式

      不区分大小写是指正则表达式在匹配文本字符串的时候,不区分文本字符串中的大小写问题。

      模式指定方式

        1.模式修饰符指定:模式修饰符(?i),例如:正则表达式(?i)the,表示匹配文本字符串中的不区分大小写the。

        2.预定义的常量作为特殊参数传入指定:python中使用常量re.I或者re.IGNORECASE;JS中使用/regex/i,其中re.I用法例:re.search(patten, string, re.I);JS中regex为匹配为本,如1中例子的the。

      提取超链接的正则表达式

    (?i)<as+hrefs*=s*["']?([^"'s]+)["']?>([^<]+)</a>

      提取标题的正则表达式

    (?i)<title>([^>]+)</title>

      提取图片的正则表达式

    (?i)<imgs[^>]*?src=['"]?([^'"]+)[^'"]?[^>]*>

       单行模式

      单行模式下,所有文本只有一行。回到点号匹配任意字符问题,我们提到过,点号是不能匹配 换行符的,但是在单行模式下,所有文本一行显示,相应的 换行符也只是一个普通的空白符了,不具有换行效果的,因此,点号是可以匹配的。故,点号在单行模式下,是可以匹配任意字符的。

      单行模式影响的是点号的匹配规则:默认模式下,点号可以匹配 换行符以外的任意字符;单行模式下,点号可以匹配任意字符包括 换行符。

      模式指定方式

        1.模式修饰符指定:模式修饰符(?s),用法在正则表达式开头加上(?s)表示此正则表达式启动单行模式;

        2.预定义的常量作为特殊参数传入指定:python中使用常量re.S或者re.DOTALL;JS中不支持单行模式,其中re.S用法例:re.search(patten, string, re.S)。

      多行模式

      多行模式与单行模式没有必要的联系。多行模式影响的是^和$的匹配规则:默认模式下,^和$匹配的是整个字符串的起始位置和结束位置;多行模式下,^和$可以匹配字符串内部的起始位置和结束位置。

      默认模式下,“人生苦短 我用python”和多行模式下,“人生苦短 我用python”。首先明白一点,没有指定单行模式情况下, 换行符都是表示换行的,不再是普通的空白符。即

    “人生苦短
    我用python”

      默认模式下,^和$会分别匹配“人”之前位置和“n”之后位置;而多行模式下,^匹配的位置就变成了“人”之前的位置和“我”之前的位置,$匹配的位置变成了“短”之后的位置和“n”之后的位置。“$短”和“^我”都是匹配了字符串内部的起始位置和结束位置。

      模式指定方式

        1.模式修饰符指定:模式修饰符(?m),用法在正则表达式开头加上(?m)表示此正则表达式启动多行模式;

        2.预定义的常量作为特殊参数传入指定:python中使用常量re.M或者re.MULTILINE;JS中用/regex/m,其中re.M用法例:re.search(patten, string, re.M)。

      注释模式

      正则表达式一般添加注释的方法为(?#comment),可以在正则表达式的任意位置添加注释。注释模式添加注释是把正则表达式以多行字符串形式表示,在每行正则规则后面添加 #comment,表示注释。  

      模式指定方式

        1.模式修饰符指定:模式修饰符(?x),用法在正则表达式开头加上(?x)表示此正则表达式启动注释模式;

        2.预定义的常量作为特殊参数传入指定:python中使用常量re.X或者re.VERBOSE;JS中用/regex/x,其中re.S用法例:re.search(patten, string, re.X)。

    pattern = r'''
    (?x)  #enable multiline and extended mode
    (
        (d{4})  #year
        -  #dash
        (d{2})  #month
        -
        (d{2})  #day
    )
    '''

      其他模式

      re.U或者re.UNICODE,字符组匹配字符可以是unicode字符,包括中文字符。

      re.A或者re.ASCII,字符组匹配字符是ASCII字符。

  • 相关阅读:
    在MFC中使用一个单独的类实现数据在各个类之间的传递
    在MFC中实现对象之间数据的传递。
    extern,头文件和ifndif宏
    在MFC下如何定义全局变量和全局函数
    语言当中一些经常看到 却又迷糊的修饰符
    C++基础之头文件和源文件的关系
    如何使用别人的代码 (特指在MFC里面 或者推广为C++里面)
    DataGird 相关
    在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查
    Invert Binary Tree
  • 原文地址:https://www.cnblogs.com/snow-lanuage/p/10609040.html
Copyright © 2020-2023  润新知