8. 拆分含有多种分隔符的字符串

例如,某个字符串包含多种不同的分隔符,如:

s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

其中,;|\t都是分隔符号。

要求:把该字符串根据分隔符号拆分不同的字段。

解决方案:

  1. 连续使用字符串的split()方法,每次处理一种分隔符号;

  2. 使用正则表达式的re.split()方法(推荐)。


  • 对于split()方法:
t = ''
t.split(sep, maxsplit)

返回一个字符串中单词组成的列表,使用sep作为分隔符字符串。

sep表示用来分割字符串的分隔符,None(默认值)表示根据任何空格进行分割;maxsplit表示最大分割次数,-1(默认值)表示没有限制。

  • 对于extend()方法:
t = []
t.extend(iterable)

extend()方法用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表),可将多维列表转换为一维列表。

  • 对于sum()方法:
`sum()`用于求和,iterable, start)

sum()用于求和,默认start=0。对于一个多维列表,可以将start=[],这样可以得到一个一维列表。


  • 方案1示例:
s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

def my_split(s, seps):
    res = [s]
    for sep in seps:
        t = []
        list(map(lambda ss: t.extend(ss.split(sep)), res))
        res = t
    return res

answer = my_split(s, ',;|\t')
print(answer)

['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']              #结果

上面的方法可行,但使用reduce更为简单。

from functools import reduce

s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

def my_split(s, seps):
    res = reduce(lambda t, sep: sum(map(lambda ss: ss.split(sep), t), []), seps, [s])
    return res

answer = my_split(s, ',;|\t')
print(answer)

['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']              #结果

  • 方案2示例:
import re

s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

answer = re.split('[,;|\t]+', s)
print(answer)

['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']              #结果

可以看到,在处理多种分隔符时,方案2比方案1更为简便。当然,对于单个分隔符的处理,建议使用split()方法而不是re.split()方法。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值