如何在 pyparse 语法中定义可选词?

How to define an optional word in pyparse grammar?

我正在为对象名称和视图解析 sql 代码对象,我注意到有一些可选的关键字可能会影响我的语法。我想我需要能够定义一个可选关键字,但我还没有找到这样做的方法。

例如

viewDefinition = "CREATE OR REPLACE VIEW" + Word( alphas+"_", alphanums+"_") 
forceviewLine = "CREATE OR REPLACE FORCE VIEW VW_MY_TEST_VIEW"

print(forceviewLine,"->", viewDefinition.parseString(forceviewLine))
viewname = viewDefinition.parseString(forceviewLine)[1]

因为语法不合适我会遇到以下错误

pyparsing.ParseException:预期 "CREATE OR REPLACE VIEW"(在字符 0),(第 1 行,col:1)

有没有办法在关键字 VIEW 之前定义语法上的可选关键字,并且我可以获得 VW_MY_TEST_VIEW 代码对象名称?

我想通了,认为它可能对其他人有用,所以我自己回答。

COR = CaselessLiteral('CREATE OR REPLACE') 
optFORCEkw = Optional(CaselessLiteral('FORCE'))
V = CaselessLiteral('VIEW')


forceviewLine = "CREATE OR REPLACE FORCE VIEW VW_MY_TEST_VIEW"
normalviewLine = "CREATE OR REPLACE VIEW VW_MY_TEST_VIEW"

newGrammer2 = COR + optFORCEkw + V + Word( alphas+"_", alphanums+"_") 
print(forceviewLine,"->", newGrammer2.parseString(forceviewLine))
print(normalviewLine,"->", newGrammer2.parseString(normalviewLine))