python - 如何创建一个可以根据输入参数将字符串拆分任意次数的函数?

标签 python string function split

我正在尝试创建一个函数,将字符串拆分为项目,然后将这些项目进一步拆分为子项目,并连续执行此操作,直到用完参数为止。

比如我想先把下面的字符串用逗号分割,然后用行分​​割,再用感叹号分割,最后用字母b分割。这是四次 split 。

s = 'abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!abcde,abcde|abcde!'

使用以下内容我可以获得所需的结果:

split1 = s.split(',')
split2 = map(lambda i:i.split("|"),split1)
split3 = map(lambda i: map(lambda subitem: subitem.split("!"),i),split2)
split4 = map(lambda i: map(lambda subitem: map(lambda subsubitem: subsubitem.split("b") ,subitem),i),split3)

结果:

[[[['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['']]]]

但是,我想编写一个函数来执行整个过程并接受任意数量的参数。换句话说,该函数可以执行上述过程,但只能针对感叹号和行进行拆分,或者针对任意数量的项目进行拆分。

如何制作一个执行上述过程但看起来像这样的函数?

func(s,*args)

这样它就可以执行以下命令来完成与上面相同的结果。

func(s,",","|","!","b")

最佳答案

from string import split
def rec_split(s, *tokens):
    if tokens == ():
        return s
    else:
      return map(lambda x: rec_split(x, *tokens[1:]), split(s, tokens[0]))

对我来说,这给出了:

In [669]: s = (
    'abcde,abcde|abcde!abcde,abcde|abcde!'
    'abcde,abcde|abcde!abcde,abcde|abcde!'
    'abcde,abcde|abcde!abcde,abcde|abcde!'
    'abcde,abcde|abcde!abcde,abcde|abcde!'
)

In [670]: rec_split(s, ",", "|", "!", "b")
Out[670]: 
[[[['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['a', 'cde']]],
 [[['a', 'cde']], [['a', 'cde'], ['']]]]

关于python - 如何创建一个可以根据输入参数将字符串拆分任意次数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206666/

相关文章:

Python3+Django1.10+mysqlclient1.3.9 : cannot save emoji characters

java - 将 Base64 编码的 md5 转换为可读字符串

c - 字符串和指针的问题

JavaScript 面向对象编程 : Passing a value to property through input fails

javascript - 使用变量中定义的函数

javascript - JS - 访问作用域外的函数参数数组

Python for 循环范围与时间而不是添加索引

python - 将记录输入 Postgres 时出现验证错误

python - 如何在不使用 max() 的情况下找到数组中的最大整数

java - 检查字符串是否不为空且不为空