需求:
我们要把某个字符串按照分隔符号拆分成不同的字段,该字符串包含多种不同的分隔符,例如:
s = 'ab;cd|efg|hi,jkl|mn opq;rst,uvw xyz'
其中<,>,<;>,<|>,< >都是分隔符如何处理?
思路:
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 opq;rst,uvw xyz'
In [26]: my_split(s,',;|/t')
Out[26]: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn opq', 'rs', '', 'uvw xyz']
In [27]: my_split(s,',;| ')
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),[]),',;| ',[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,',;| ')
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 opq;rst,uvw xyz'
In [36]: re.split('[,;| ]+',s)
Out[36]: ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz']