蟒蛇字符串替换,产生所有可能的组合

问题描述:

我处理字符串,每个在括号中的可选变量的动态量:蟒蛇字符串替换,产生所有可能的组合

(?please) tell me something (?please) 

现在我想用一个空字符串替换变量,并取回所有可能的变化:

tell me something (?please) 

(?please) tell me something 

tell me something 

想要的函数应该处理多个,不同的和无穷无尽的变量。

任何帮助高度赞赏。

+0

我已经尝试了DSM http://*.com/questions/14841652/string-replacement-combinations的代码,但它不适用于完整的句子,不知道为什么。 – HSRF

String Replacement Combinations上使用该解决方案的问题是,解决方案会迭代原始字符串中的每个字符,而您想检查原始字符串的子字符串。因此,您应该使用字符串split()并遍历该列表。另外,当您最后加入列表时,请将空格放回单词之间。例如,

def filler(word, from_char, to_char):  
    options = [(c,) if c != from_char else (from_char, to_char) for c in word.split(" ")] 
    return (' '.join(o) for o in product(*options)) 
list(filler('(?please) tell me something (?please)', '(?please)', '')) 

这将返回

['(?please) tell me something (?please)', '(?please) tell me something ', ' tell me something (?please)', ' tell me something '] 

如果你想忽略不包含清除(行'(?please) tell me something (?please)')行,哈克简单的办法就是去掉结果的第一个元素,因为product的工作方式可以保证第一个结果会选取每个选项的第一个元素,这对应于没有删除字符串的行。

+0

对不起还有一个问题:我如何用几个不同的和可选的变量来做到这一点。在循环中迭代对我无效 – HSRF

+0

您需要修改'c!= from_char'以使其与变量列表进行比较。请尝试一下,让我知道它是怎么回事。 – James

+0

你让我做到了! 'options = [(c,)if c不在from_char else(c,to_char)for c in word.split(“”)]'谢谢 – HSRF