• 3.2.2 正則表達式的功能


    在本模块内主要包含函数、常量和异常。有一些函数是为简单使用,而降低一些特征。在大多数的正规的应用程序里,都是採用编译方式来使用正則表達式。

    re.compile(pattern, flags=0)

    编译一个正則表達式。并生成一个正則表達式对象,而这个对象能够用法match()search()来进行匹配。

    编译正則表達式的选项。能够通过flags来设置,这些參数能够通过或(|)的方式来进行组合。

    这个编译步骤例如以下:

    prog = re.compile(pattern)

    result = prog.match(string)

    与以下处理过程相同:

    result = re.match(pattern, string)

    只是,re.compile()的方式在多次反复使用这个正則表達式时是有非常大优势。因为会大大降低正則表達式的反复编译过程。值得注意是:最新版本号的Python会把re.compile()近期几次编译的对象缓存起来,假设仅仅是使用非常少正則表達式,不用操心反复编译的问题。

    样例:

    print('re.compile');

    prog = re.compile(r'caid')

    result = prog.match(r'cai7 caimouse cai cai8')

    if result:

        print(result.group(0))

    输出结果例如以下:

    re.compile

    cai7

    re.A

    re.ASCII

    指定wWBdDsS使用ASCII模式之下。而不使用在UNICODE的模式。只是它仅仅有UNICODE里使用,而在8位的模式之下忽略这个标志。为了兼容曾经版本号的正則表達式,re.U标志还在使用,因为在Python3.0以后都默认使用UNICODE的方式,所以re.U是多余的。

    样例:

    print('re.A, re.ASCII')

    prog = re.compile('深圳软件中心\d+', re.A)

    result = prog.match('深圳软件中心007 用软件改变世界98')

    if result:

        print(result.group(0))

    输出结果例如以下:

    re.A, re.ASCII

    深圳软件中心007

    re.DEBUG

    具体显示编译正則表達式的信息。

    样例:

    print('re.DEBUG')

    prog = re.compile('深圳软件中心\d+', re.DEBUG)

    result = prog.match('深圳软件中心007 用软件改变世界98')

    if result:

        print(result.group(0))

    输出结果例如以下:

    re.DEBUG

    literal 28145

    literal 22323

    literal 36719

    literal 20214

    literal 20013

    literal 24515

    max_repeat 1 2147483647

      in

        category category_digit

    深圳软件中心007

    re.I

    re.IGNORECASE

    忽略大写和小写字母差别。会把[A-Z]集合字符转换为小写字母再来匹配。

    假设UNICODE的字母是不受影响的。

    样例:

    print('re.I, re.IGNORECASE')

    prog = re.compile('myCar\d+', re.IGNORECASE)

    result = prog.match('mycar007 用软件改变世界98')

    if result:

        print(result.group(0))   

    结果输出例如以下:

    re.I, re.IGNORECASE

    mycar007

    re.L

    re.LOCALE

    wWBsS依赖不同本地系统而改变定义范围。因为不同系统差异。导致使用这个特性会比較不可靠,推荐使用UNICODE的方式来消除这方面的差异。

    样例:

    print('re.L, re.LOCALE')

    prog = re.compile('myCar\d+', re.I|re.L)

    result = prog.match('mycar007 用软件改变世界98')

    if result:

        print(result.group(0))   

    结果输出例如以下:

    re.L, re.LOCALE

    mycar007

    re.M

    re.MULTILINE

    指定多行模式匹配。当指定为此标志时,‘^’表示匹配字符串开头和全部换行符后面的字符串的开头。相同‘$’表示字符串结尾和全部换行符前的结尾。

    样例:

    print('re.M, re.MULTILINE')

    result = re.findall('^mycar','mycar007  mycar008 ', re.M)

    if result:

        print(result) 

    result = re.findall('^mycar','mycar007  mycar008 ')

    if result:

        print(result)   

    结果输出例如以下:

    re.M, re.MULTILINE

    ['mycar', 'mycar']

    ['mycar']

    re.S

    re.DOTALL

    点号‘.’是否表示换行符的标志。当设置时。包含表示换行符,否则不包含。

    样例:

    print('re.S, re.DOTALL')

    result = re.findall('mycard+.','mycar007 mycar008 ', re.S)

    if result:

        print(result) 

    result = re.findall('mycard+.','mycar007 mycar008 ')

    if result:

        print(result) 

    结果输出例如以下:

    re.S, re.DOTALL

    ['mycar007 ', 'mycar008 ']

    ['mycar007', 'mycar008']

    re.X

    re.VERBOSE

    这个标志主要用来给正則表達式进行排版和凝视使用。

    当有这个标志时。正則表達式中的换行符会忽略,#号当作凝视的開始。这样方式能够提高正則表達式的阅读性,但功能并没有改变。

    样例:

    print('re.X, re.VERBOSE')

    result = re.findall(r"""d +  # the integral part

                       .    # the decimal point

                       d *  # some fractional digits""",

                        '007.008  mycar008 ', re.X)

    if result:

        print(result) 

    result = re.findall(r"d+.d*",'007.008  mycar008 ')

    if result:

        print(result)

    结果输出例如以下:

    re.X, re.VERBOSE

    ['007.008']

    ['007.008']



    蔡军生 QQ:9073204 深圳

  • 相关阅读:
    【C语言】找出1000以内所有的素数
    【C语言】字符数组,碎碎念
    【C语言】将输入的10个数排序
    C语言 排序算法
    冒死透露!全球前25名最臭名昭着的黑客人物
    苹果系统新致命漏洞,黑客可以随意控制您的手机设备
    物流行业的5大安全风险
    黑客来势汹汹,数据科学能拯救社交媒体吗?
    Facebook超过1亿用户数据泄露,疑与中国黑客组织有关?
    太可怕了!黑客可以通过监控智能手机传感器窃取您的密码
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7301423.html
Copyright © 2020-2023  润新知