书接上文,上篇学习了str.split(),这篇学习一下re.split(),该方法为python第三方库re库中的split()方法,会更强大一些。

问题:

s = '1,2,3,4,a,5,6,7,8,b,9,10,11,12' ['1,2,3,4', '5,6,7,8', '9,10,11,12']

要想将上述字符串按要求进行分割,意味着分隔符为',a,' 和 ',b,':

针对上述情况,要想利用str.split()取得想要的结果,就要费点劲了,具体实现可见文末;

这时,就可以利用re.split()方法了

import re


s = '1,2,3,4,a,5,6,7,8,b,9,10,11,12'

re.split(',[a-b],', s, maxsplit=0, flags=0) # ['1,2,3,4', '5,6,7,8', '9,10,11,12']

那接下来介绍一下re.split()

re.split(pattern, string, maxsplit=0, flags=0)pattern:相当于str.split()中的sep,分隔符的意思,不但可以是字符串,也可以为正则表达式: '[ab]',表示的意思就是取a和b的任意一个值(可参考: https://docs.python.org/3/library/re.html?highlight=re%20split#re.split )

string:要进行分割的字符串

maxsplit:分割的最大次数,这个参数和str.split()中有点不一样:

默认值为0,表示分割次数无限制,能分几次分几次;取负数,表示不分割;若大于0,表示最多分割maxsplit次;

import re


s = '1,2,3,4,a,5,6,7,8,b,9,10,11,12'


# maxsplit<0,表示不分割

re.split(patter=',[a-b],', s=s, maxsplit=-2, flags=0) # ['1,2,3,4,a,5,6,7,8,b,9,10,11,12' ]


# maxsplit = 0,表示能分几次分几次

re.split(patter=',[a-b],', s=s, maxsplit=0, flags=0) # ['1,2,3,4', '5,6,7,8', '9,10,11,12']


# maxsplit = 1, 表示分割一次

re.split(patter=',[a-b],', s=s, maxsplit=1, flags=0) # ['1,2,3,4', '5,6,7,8,9,10,11,12']flags:该参数可以用来修改pattern表达式的功能,比如忽略大小写 re.IGNORECASE(简写:re.I),即当flags = re.IGNORECASE ,pattern = [A-Z]不但能匹配到大写字母,也能匹配到小写字母;其他详细情况可参见:https://docs.python.org/3/library/re.html?highlight=re#contents-of-module-re

小结:

re.split() 与 str.split()的区别就是,re.split()功能更强大,可以借助正则表达式来表示一些较复杂的多样化的分隔符。

如何利用str.split()方法,实现上述问题:

s = '1,2,3,4,a,5,6,7,8,b,9,10,11,12' ['1,2,3,4', '5,6,7,8', '9,10,11,12']

[x for i in s.split(',a,') for x in i.split(',b,')]

也许你有更好的实现方法,欢迎与我交流,若有错误,敬请批评指正!

关于flags参数和re.split()的一些更详细的用法,会有另一篇文章。