今天在学习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)