2
如何從一組令牌中獲得零個或僅一個令牌?他們可以以任何順序。說這是我的代碼:Pyparsing - 組中的零個或一個
def parseFunc(self, string):
firstToken = CaselessKeyword("KeyWordOne")
secondToken = CaselessKeyword("KeyWordTwo")
thirdToken = CaselessKeyword("KeyWordThree")
stmt = ZeroOrMore(firstToken | secondToken | thirdToken)
return stmt.parseString(string)
隨着零或有一個問題,因爲每個令牌可以顯示多次。 隨着可選,他們必須按照他們列出的確切順序。
這是我目前的解決方案:
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
謝謝你的回答,但可選的令牌必須在正確的順序。我需要的是這些令牌以任意順序的可能性。我找到了一些不同的解決方案,並將其添加到我的問題中。 – Xitac
您提供的文件與準確的順序無關,它只接受*一個選項。看我的編輯。 – PaulMcG
這對我不起作用。這可能是由於pyparsing(1.5.7)的舊版本?我的陳述使用的ZeroOrMore確實提供了任意的順序,但它也允許多個相同的標記。這就是爲什麼我從分析中獲得令牌之後添加了set檢查,這解決了我的問題。 – Xitac