Python 将字符串分解为已知模式

Python 将字符串分解为已知模式,python,string,pattern-matching,Python,String,Pattern Matching,以下是python字符串列表: 模式=[ “KBKKB”, “BBBK”, “BKB”, “KBBB”, “KBB”, “BKBB”, “BBKB”, “KKBKB”, “BKBK”, “KBKB”, “kbk”, “BBK”, “BB”, “BKKB”, “BBB”, “KBBK”, “BKKBK”, “KB”, “kbk”, “kkbkb”, “KBK”, “BBKBK”, “BBBB”, “BK”, “KKBKBK”, “KBBKB”, “BBKKB”, “KKBB”, “KKB” ] 我

以下是python字符串列表:

模式=[ “KBKKB”, “BBBK”, “BKB”, “KBBB”, “KBB”, “BKBB”, “BBKB”, “KKBKB”, “BKBK”, “KBKB”, “kbk”, “BBK”, “BB”, “BKKB”, “BBB”, “KBBK”, “BKKBK”, “KB”, “kbk”, “kkbkb”, “KBK”, “BBKBK”, “BBBB”, “BK”, “KKBKBK”, “KBBKB”, “BBKKB”, “KKBB”, “KKB” ]

我有一个只由任意长度的K和B组成的输入字符串。我想知道输入字符串的所有可能的完整分解。仅举一个8 B字符串的示例:

bbbbbbbbbb

以下是可能的分解

bbbbbbbbbb

bbbbbbbb

bbbbbbbb

bbbbbbbb

BBB BBB BB

BBBBBBB


有人能指导我怎么做吗?我现在不太关心效率。

这里有一种使用递归的方法:

def getPossibleDecompositions(s):
    if s == '':
        yield []
    else:
        for pattern in patterns:
            if s.startswith(pattern):
                for x in getPossibleDecompositions(s[len(pattern):]):
                    yield [pattern] + x

for x in getPossibleDecompositions('BBBBBBBB'):
    print x

你能定义分解吗?为什么B不可能分解?另一个字符的相关性如何?@Jason R.Coombs:
B
是不允许的,因为它不是模式列表的成员。@Jason,因为这不是有效的“权重”。实际上我在研究波斯语/阿拉伯语韵律。该项目是在GPL下开源的,非常感谢!它似乎在做这项工作。