2

アルゴリズムまたはそれを実装するためのアドバイスを探しています。
入力:

"{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()

「{||}{||}」構造のみをサポートします。裸の言葉も、ネストされた構造もありません。

4

2 に答える 2

4

このプロジェクトはあなたに適しています: https://github.com/asciimoo/exrex

Exrex は、特定の正規表現に一致するすべての文字列を生成するツールです。

于 2012-11-27T05:17:01.907 に答える
0

公開されている pyparsing の例には、正規表現インバーターが含まれています。

于 2016-04-21T13:53:26.607 に答える