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']
    
  • 相关阅读:
    ngx_lua_waf完整安装说明
    Linux(CentOS)下的JDK的安装和环境配置
    Genymotion的2个问题及解决方法
    Appscan的第一个测试请求就是提交MAC地址
    oracle相关知识
    数据结构之树
    kafka的写入内存?硬盘
    算法的时间复杂度和空间复杂度
    Java线程池
    mapReduce和spark的shuffle
  • 原文地址:https://www.cnblogs.com/Richardo-M-Q/p/13891972.html
Copyright © 2011-2022 走看看