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:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.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)
posted @ 2021-01-13 09:24  xzy186  阅读(497)  评论(0编辑  收藏  举报