python字符串替换,生成所有可能的组合

时间:2015-07-19 01:18:07

标签: python string replace iteration itertools

我使用字符串,每个字符串在括号中都有动态数量的可选变量:

(?please) tell me something (?please)

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

tell me something (?please)

(?please) tell me something

tell me something

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

任何帮助高度赞赏。

1 个答案:

答案 0 :(得分:1)

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)'),一个hacky解决方案只是删除结果的第一个元素,因为product的工作方式保证了第一个元素result选择每个选项的第一个元素,该元素对应于没有删除字符串的行。