我正在尋找一種算法或一些建議來實現它。
輸入:文本生成算法
"{1|2} word {3|4}"
輸出:
["1 word 3", "1 word 4", "2 word 3", "2 word 4"]
而且,我想支持嵌套結構 - "{1|2{0|1}}" -> ["1", "20", "21"]
我意識到這個問題是太一般了,但不希望實現車輪。也許你看到了類似的東西。
UPD
from pyparsing import *
from collections import deque
s = u"{1|2} {3|4}"
deque = deque()
def mesh_lists(listOne, listTwo):
result = []
for l1 in listOne:
for l2 in listTwo:
firstWord = str(l1).strip()
secondWord = str(l2).strip()
result.append(" " + firstWord + " " + l2 + " ")
return result
def action(string, pos, token):
global deque
deque.append(list(token[0]))
def processDeque():
global deque
while len(deque) > 1:
l1 = deque.popleft()
l2 = deque.popleft()
res = mesh_lists(l1,l2)
deque.appendleft(res)
return [x.strip() for x in deque[0]]
_lcurl = Suppress('{')
_rcurl = Suppress('}')
_pipe = Suppress('|')
word = Regex("[^{|}]+")
varBlock = Forward()
entry = word | varBlock
varList = Group(entry + ZeroOrMore(_pipe + entry))
varBlock << (_lcurl + Optional(varList) + _rcurl).setParseAction(action)
template = ZeroOrMore(entry)
res = template.parseString(s)
print processDeque()
它僅支持 「{||} {} ||」 結構。沒有裸字,沒有嵌套結構。
如果問題太籠統,可能會被關閉。嘗試一起收集您的想法和嘗試,並向我們展示您的想法。雖然我之前在計算理論書籍中看到過這樣的問題 - 但總體思路是在字母表中夾入一個不變的標記。 – Makoto
@AustinHenley更新 – Deck