当一组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) 打印结果