如果輸入相對比較簡單 - 的{
和}
唯一出現是如圖所示的問題提供了多種可能的文本片段的目的 - 你可以使用正則表達式像下面這樣:
import re
p = re.compile('(\{[^\}]+\}|[^\{\}]*)')
那麼你還是文本分成片段,像這樣:
frags = p.split("{Foo|Bar} baz {quux|wibble}.")
# ['', '{Foo|Bar}', '', ' baz ', '', '{quux|wibble}', '', '.', '']
每串在這個列表中,您可以生成可能值的列表(鄰NLY一個字符串不開始{
):
def options(s):
if len(s) > 0 and s[0] == '{':
return [opt for opt in s[1:-1].split('|')]
return [s]
options("foo")
# ["foo"]
options("{foo|bar}")
# ["foo", "bar"]
然後建立選項列表的列表:
opt_lists = [options(frag) for frag in frags]
然後建立笛卡爾乘積並加入:
import itertools
for spec in itertools.product(*opt_lists):
print(''.join(spec))
這裏的"{Foo|Bar} baz {quux|wibble}."
的輸出示例:
Foo baz quux.
Foo baz wibble.
Bar baz quux.
Bar baz wibble.
如果輸入中存在其他複雜性,則可能需要爲實際輸入格式使用更復雜的正則表達式或解析器,但生成作爲中間結果的選項列表的一般想法仍然有效。
你不能以任何可理解的方式解釋你想要做什麼。 –
「你好,我 - 我們」和「你好,我 - 我」可能嗎? –
對不起,我只是更新了我的問題。對於不清楚的一個,我真的很沮喪。 –