我使用字符串,每个字符串在括号中都有动态数量的可选变量:
(?please) tell me something (?please)
现在我想用空字符串替换变量并取回所有可能的变体:
tell me something (?please)
(?please) tell me something
tell me something
想要的函数应该处理多个,不同和无穷无尽的变量。
任何帮助高度赞赏。
答案 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选择每个选项的第一个元素,该元素对应于没有删除字符串的行。