zoukankan      html  css  js  c++  java
  • python的re模块中re.I模式在split方法下不生效解决办法

    今天在学习re模块下的split方法时,发现re.I模式像下面这些写执行后之后不生效,正常加了re.I选项后应该是要忽略大小写的,#后面是执行结果,。

    
    
    test_line = r'Ab123abcABC456def789ggh'
    bb = re.split(r'(a)', test_line, re.I)
    print(bb)

    # ['Ab123', 'a', 'bcABC456def789ggh']

    后来上网查了一下,找到了两种方法可以解决不生效问题:

    方法一:

    使用(?i)这种写法,注意匹配项要用()括起来,比如下面的(a)

    test_line = r'Ab123abcABC456def789ggh'
    aa = re.split(r'(?i)(a)', test_line)
    print(aa)
    # ['', 'A', 'b123', 'a', 'bc', 'A', 'BC456def789ggh']

    方法二:

    使用re模块下的compile方法进行中转:

    test_line = r'Ab123abcABC456def789ggh'
    m = re.compile(r'(a)', re.I)
    dd = m.split(test_line)
    print(dd)
    # ['', 'A', 'b123', 'a', 'bc', 'A', 'BC456def789ggh']

    完整代码:

     1 #!/usr/bin/python
     2 # -*- coding: UTF-8 -*-
     3 
     4 import re
     5 
     6 
     7 test_line = r'Ab123abcABC456def789ggh'           # 定义一个字符串变量test_line
     8 m = re.compile(r'(a)', re.I)                     # 使用re的compile方法定义一个正则表达式规则
     9 aa = re.split(r'(?i)(a)', test_line)             # 在split方法中使用(?i)写法,忽略大小写
    10 bb = re.split(r'(a)', test_line, re.I)           # 在split方法中使用re.I写法,忽略大小写
    11 cc = re.search(r'(a)', test_line, re.I)          # 在search方法中使用re.I写法,忽略大小写
    12 dd = m.split(test_line)                          # 在split方法中使用compile定义的正则表达式
    13 print(aa)                                        # 打印aa变量的值
    14 print(bb)                                        # 打印bb变量的值
    15 print(cc.group())                                # 打印cc变量的group值
    16 print(dd)                                        # 打印dd变量的值

    执行结果:

    C:UsersAdministratorAppDataLocalProgramsPythonPython35-32python.exe C:/Users/Administrator/Desktop/mypython/test.py
    ['', 'A', 'b123', 'a', 'bc', 'A', 'BC456def789ggh']
    ['Ab123', 'a', 'bcABC456def789ggh']
    A
    ['', 'A', 'b123', 'a', 'bc', 'A', 'BC456def789ggh']
    
    进程已结束,退出代码0

    又试了一下正确的写法应该是下面这样,弄了半天是格式的问题:

    bb = re.split(r'(a)', test_line, flags=re.I)

  • 相关阅读:
    leetcode319
    leetcode516
    leetcode46
    leetcode337
    leetcode287
    leetcode328
    leetcode241
    2018-6-30-dotnet-设计规范-·-抽象类
    2018-6-30-dotnet-设计规范-·-抽象类
    2018-8-10-WPF-如何画出1像素的线
  • 原文地址:https://www.cnblogs.com/xzy186/p/14270371.html
Copyright © 2011-2022 走看看