[Python高效编程] - 拆分含有多种分隔符的字符串

把某个字符串依据分隔符拆分不同的字段,该字符串有多种不同的分隔符,例如:
s = “a/b;c|d\tefg|hijk\tlmn;op/q;r\tstuvw;xyz”

其中 “,”、”;”、“|”、”\t”都是分隔符

开发环境

  1. Python版本: python3.6
  2. 调试工具:pycharm 2017.1.3, ipython
  3. 电脑系统:Windows 10 64位系统
  4. Python需求库:re

使用 split() 方法

分割空白字符

“space”、“\t”、”\r”、”\n”等字符

In [1]: s = "a b\rc\nd\n e\nf"

In [2]: s.split()
Out[2]: ['a', 'b', 'c', 'd', 'e', 'f']

分割其它字符

In [1]: s = "a;b;c"

In [2]: s.split(";")
Out[2]: ['a', 'b', 'c']

处理多个字符

网上通用做法

s = "a/b;c|d\tefg|hijk\tlmn;op/q;r\tstuvw;xyz"
sign = ['/', '|', '\t', ';']
def my_split(s, sign):
    s = [s]
    for i in sign:
        t = []
        for x in s:
            map(lambda x: t.extend(x.split(i)), s)
        s = t
    return s
print(my_split(s,sign))
[]

这个网上通用的做法,Python3版本由于 lambda 引起的闭包问题,就不能使用
这个原因详细介绍参考:

http://blog.csdn.net/lanhaixuanvv/article/details/78628516

实际解决方法

s = "a/b;c|d\tefg|hijk\tlmn;op/q;r\tstuvw;xyz"
sign = ['/', '|', '\t', ';']
def my_split(s, sign):
    for i in sign:
        t = []
        #map(lambda x: t.extend(x.split(i)), s)
        for x in s:
            def lambd(i, t, x, s):
                map(t.extend(x.split(i)),s)
            lambd(i, t, x, s) 
        s = t
    return s

print(my_split(s.split(),sign))
['a', 'b', 'c', 'd', 'efg', 'hijk', 'lmn', 'op', 'q', 'r', 'stuvw', 'xyz']

使用 re.split()

import re
s = "a/b;c|d\tefg|hijk\tlmn;op/q;r\tstuvw;xyz"
res = re.split(r'[/\t\n;|]', s)
print(res)
['a', 'b', 'c', 'd', 'efg', 'hijk', 'lmn', 'op', 'q', 'r', 'stuvw', 'xyz']
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值