トークンのグループから各トークンをゼロまたは 1 つだけ取得するにはどうすればよいですか? それらは任意の順序にすることができます。これが私のコードだとしましょう:
def parseFunc(self, string):
firstToken = CaselessKeyword("KeyWordOne")
secondToken = CaselessKeyword("KeyWordTwo")
thirdToken = CaselessKeyword("KeyWordThree")
stmt = ZeroOrMore(firstToken | secondToken | thirdToken)
return stmt.parseString(string)
ZeroOrMore では、すべてのトークンが複数回表示される可能性があるため、問題があります。Optional では、リストされている正確な順序である必要があります。
これは私の現在の解決策です:
stmt = ZeroOrMore(firstToken | secondToken | thirdToken)
tokens = stmt.parseString(string)
s = set()
for x in tokens:
if x[0] in s: return "Error: redundant options"
s.add(x[0])
return tokens