Parsing 百灵鸟:如何只挑选一些图案
我只想从文本文件中提取一些结构化模式 例如,在下面的文本中:Parsing 百灵鸟:如何只挑选一些图案,parsing,text-parsing,lark-parser,Parsing,Text Parsing,Lark Parser,我只想从文本文件中提取一些结构化模式 例如,在下面的文本中: blablabla foo FUNC1 ; blabliblo blu 我只想分离“foo FUNC1;” 我试图将lark解析器与以下解析器一起使用 foo=Lark(''' start: statement* statement: foo | anything anything : /.+/ foo : "foo" ID ";"
blablabla
foo FUNC1 ; blabliblo blu
我只想分离“foo FUNC1;”
我试图将lark解析器与以下解析器一起使用
foo=Lark('''
start: statement*
statement: foo
| anything
anything : /.+/
foo : "foo" ID ";"
ID : /_?[a-z][_a-z0-9]*/i
%import common.WS
%import common.NEWLINE
%ignore WS
%ignore NEWLINE
''',
parser="lalr" ,
propagate_positions=True)
但标记“任何东西”都能抓住一切。有没有办法让它不贪婪?这样令牌“foo”就可以捕获给定的模式了?您可以使用优先级来解决这个问题 对于
parser=“lalr”
,Lark支持终端上的优先级。因此,您可以将“foo”
移动到其自己的终端中,然后为该终端分配比任何东西
终端(具有默认优先级1
)更高的优先级:
分析示例字符串后,会产生以下结果:
start
statement
anything blablabla
statement
foo
foo
FUNC1
statement
anything blabliblo blu
start
statement
anything blablabla
statement
foo FUNC1
statement
anything blabliblo blu
对于parser=“earley”
,Lark支持规则优先级,因此您可以使用:
foo.2 : "foo" ID ";"
分析示例字符串后,会产生以下结果:
start
statement
anything blablabla
statement
foo
foo
FUNC1
statement
anything blabliblo blu
start
statement
anything blablabla
statement
foo FUNC1
statement
anything blabliblo blu