zoukankan      html  css  js  c++  java
  • 如何拆分含有多个分隔符的字符串?

    需求:
    我们要把某个字符串按照分隔符号拆分成不同的字段,该字符串包含多种不同的分隔符,例如:
    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']
    
  • 相关阅读:
    L2-004. 这是二叉搜索树吗?
    CF934A A Compatible Pair
    CF937B Vile Grasshoppers
    CF940B Our Tanya is Crying Out Loud
    ZOJ 3182 Nine Interlinks
    ZOJ 3175 Number of Containers
    Codeforces Round #193 (Div. 2) B
    CodeForces 149D Coloring Brackets
    POJ 2653 Pick-up sticks(计算几何)
    UVA 12506 Shortest Names
  • 原文地址:https://www.cnblogs.com/Richardo-M-Q/p/13891972.html
Copyright © 2011-2022 走看看