python字符串高级(切割多个分隔符)

当一组s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'字符串中包含多个不同分隔符时,想要把分隔符都去掉,

但s.split(';,|\t') python字符串中split方法不能同时把多个分隔符去掉。此时有以下三种方法解决:

1):

res = s.split(';')  首先用split把第一个分隔符去掉再把结果赋给一个变量

map(lambda x: x.split('|'),res)   创建map函数,使用匿名函数在第一个结果基础上再把第二个分隔符去掉。但此时打印出来的结果是一个二维数组,即列表里嵌套列表。

t = []  由此创建一个空列表

map(lambda x: t.extend(x.split('|')),res)  把空列表拓展第二个分隔符的结果,返回两次分隔符去掉之后的数组。

此时打印t结果为 = ['ab','cd','efg','hi,jkl','mn\topq','rst,uvw\txyz']       ;和|都去掉了

res = t    把结果t列表赋值到变量

t = []  再创建一个空列表

map(lambda x: t.extend(x.split(',')),res)  空列表拓展第三个分隔符结果,返回三次分隔符去掉之后的数组。

此时打印t结果为 = ['ab','cd','efg','hi','jkl','mn\topq','rst','uvw\txyz']       ;   |  ,都去掉了

res = t    把结果t列表赋值到变量,重复以上步骤

t = []  再创建一个空列表

map(lambda x: t.extend(x.split('\')),res)  空列表拓展第四个分隔符结果,返回四次分隔符去掉之后的数组。

最终打印t结果为 = ['ab','cd','efg','hi','jkl','mn','topq','rst','uvw','txyz'],分割完成

2):

def mySplit(s, ds):         定义函数,形参s代表需要匹配的字符串语句,ds代表需要分割的符号
    res = [s]        定义一个列表,传入原始字符串赋值变量
    for d in ds:        创建循环
        t = []        定义空列表
        map=(lambda x: t.extend(x.split(d)),res)    每一次分割之后的结果拓展到空列表里
        res = t        新的结果列表赋值给原来的变量
    return [x for x in res if x]    循环结束,得到最终值,创建列表推导式去除空值,最后返回覆盖给原变量

s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'    定义原始字符串

print(mySplit(s,';,|\t'))    调用函数,传入实参

3):

import re     导入正则表达式re模块

s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'    定义原始字符串

t = re.split(r'[,;\t|]+', s)     第一个参数是一组序列,把需要分割的多个字符串符号写入列表中, 第二个参数写原始字符串,对其进行分割

print(t)    打印结果

猜你喜欢

转载自blog.csdn.net/jamfiy/article/details/87883546