当解析HTML标签时,用正则表达式对标签字符串进行split
其中希望做到大小写模糊匹配,选择使用re.I
于是给出如下代码A:
import re
text = "<abc>abc efg hij</klmn>"
lst = re.split(r"[<>/ ]", text, re.I)
print(lst)
运行结果如下:
['', 'abc', 'abc efg hij</klmn>']
这并不是想要的结果。
发现给出如下代码B时可以按想要结果split,但是做不到大小写模糊匹配:
import re
text = "<abc>abc efg hij</klmn>"
lst = re.split(r"[<>/ ]", text)
print(lst)
运行结果如下:
['', 'abc', 'abc', 'efg', 'hij', '', 'klmn', '']
产生上述问题的原因在于:
re.split()接受四个参数:依次为pattern, string, maxsplit, flag。最后两个参数可选,最大分割次数默认为0,即最大;flag默认为无。
在代码A中,re.I由于位置传参被放到了第三个参数的位置,re.I的二进制值为10,所以只进行了两次分割(二进制数10即为十进制数2)
给出如下代码C即可解决问题:(进行关键值传参)
import re
text = "<abc>abc efg hij</klmn>"
lst = re.split(r"[<>/ ]", text, flags=re.I)
print(lst)
运行结果如下:
['', 'abc', 'abc', 'efg', 'hij', '', 'klmn', '']
芜湖~
注:有关split时过滤空串的问题见之前的文章哦~