的split用法_关于python中的re.split()方法的一点认识

书接上文,上篇学习了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,':

1626c305596b84b1b6e8984be44f6b37.png

针对上述情况,要想利用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()的一些更详细的用法,会有另一篇文章。

欢迎关注公众号:驿路向北,与我进行交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值