如何拆分含有多个分隔符的字符串?

需求:
我们要把某个字符串按照分隔符号拆分成不同的字段,该字符串包含多种不同的分隔符,例如:
s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'
其中<,>,<;>,<|>,<\t>都是分隔符如何处理?

思路:
1、方法一:连续使用str的split方法,每次处理一种分隔符
2、方法二:使用正则表达式的re.split()方法

代码:

# 方法一:
In [24]: def my_split(s,seps):
    ...:     res = [s]
    ...:     for sep in seps:
    ...:         t = []
    ...:         map(lambda ss: t.extend(ss.split(sep)),res) # 将二维列表合并成一维列表,t.extend方法和sum方法
    ...:         res = t
    ...:     return res
    ...: 
    ...: 

In [25]: s
Out[25]: 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

In [26]: my_split(s,',;|/t')
Out[26]: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn\topq', 'rs', '', 'uvw\txyz']

In [27]: my_split(s,',;|\t')
Out[27]: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

In [28]: from functools import reduce

In [29]: reduce(lambda l,sep:sum(map(lambda ss: ss.split(sep),l),[]),',;|\t',[s])
Out[29]: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

In [32]: my_split2 = lambda s,seps:reduce(lambda l,sep:sum(map(lambda ss: ss.split(sep),l),[]),seps,[s])

In [33]: my_split2(s,',;|\t')
Out[33]: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']

方法二:
In [34]: import re

In [35]: s
Out[35]: 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'

In [36]: re.split('[,;|\t]+',s)
Out[36]: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']
posted @ 2020-10-28 16:50  Richardo-M-Lu  阅读(285)  评论(0编辑  收藏  举报