pyparsing
のインスタンス化フラグに応じて若干異なるものと思われる 複合マッチャーオブジェクトを構成します。ここでは(簡体字)例:クラス変数要素からインスタンス変数pyparsing matcherを構築する
class MyMatcher():
def __init__(self, special_flag = False):
self.special_flag = special_flag
a = pp.Word(pp.alphas)('A')
if self.special_flag:
b = pp.Word(pp.alphas)('B')
else:
b = pp.Word(pp.nums)('B')
c = pp.Word(pp.alphas)('C')
# d = ...
# e = ...
# ...
self.expr = (a + b | b) + pp.Optional(c) # + ...
def parse(self, s):
return self.expr.parseString(s, parseAll=True)
a
、b
、c
、....私はちょうどそのよう彼らにexpr
で を参照することができ、それらを接頭辞する必要がないように、クラス変数です インスタンス参照self
(self.a
など)。 expr
は という異なるインスタンシエーションが異なるものに一致する必要があるため、 インスタンスである必要があります。
上記の例では動作します:予想通り
mymTrue = MyMatcher(True)
mymFalse = MyMatcher(False)
print (mymTrue.parse("alpha aaaa alpha"))
print (mymFalse.parse("alpha 777 alpha"))
リターン:
['alpha', 'aaaa', 'alpha']
['alpha', '777', 'alpha']
私の心配がある:なくてもたくさんの と非常に複雑なマッチャのためにこの仕事(ネスト)a
、b
、 c
,d
など...?または異なった言い方:a
、b
とc
は、次のMyMatcher
オブジェクトに上書きさという問題ではありませんようには、インスタンスに オブジェクトexpr
をクラス変数からをコピー(ディープ)フルロジック です創造?
これが問題である場合は、のような短くて美しい構成のマッチャーを(a + b | b) + pp.Optional(c)
のように変更する別の方法がありますか?