获取所有字符串分隔组合

时间:2017-07-17 15:31:39

标签: python string bash combinations

我有一个字符串,我希望得到所有可能的分组组合,同时保持它们的顺序相同。我想做一些类似于n-gram的方法然后连接结果。

所以,如果我有示例字符串:

aa bb cc dd

我想(没有特别的顺序):

aa | bb cc dd
aa bb | cc dd
aa bb cc | dd
aa | bb cc | dd
aa | bb | cc dd
aa bb | cc | dd
aa | bb | cc | dd

我更喜欢bash或python中的答案。

1 个答案:

答案 0 :(得分:3)

这可以通过递归函数来实现:

停止案例是一个空的参数列表 - 因此不会输入while循环。

否则我们想要:

  • 提供的参数
  • 对于可以使用第一个参数(即“aa”,“aa bb”,“aa bb cc”等)制作的每个组。
    • 该组,后跟“|”其次是剩余参数的每个可能分组

所以:

#!/bin/bash

combos()
{
    head=""
    echo $@
    while [[ $# -gt 0 ]]; do
        head="$head $1"
        shift
        combos $@ | sed "s/^/$head |/" 
    done
}


combos aa bb cc dd

这确实有一些不一致的间距,尾随|和重复一个分组。这些都可以整理 - 我把它留作练习。