python – 麻烦在pyparsing中进行简单的解析

python – 麻烦在pyparsing中进行简单的解析,第1张

概述我使用pyparsing有一些基本问题.下面是测试程序和运行的输出. aaron-mac:sql aaron$more s.pyfrom pyparsing import *n = Word(alphanums)a = Group( n | Group( n + OneOrMore( Suppress(",") + n )))p = Group( a + Suppress(".") ) 我使用pyparsing有一些基本问题.下面是测试程序和运行的输出.

aaron-mac:sql aaron$more s.pyfrom pyparsing import *n = Word(Alphanums)a = Group( n | Group( n + OneOrMore( Suppress(",") + n )))p = Group( a + Suppress(".") )print a.parseString("first")print a.parseString("first,second")print p.parseString("first.")print p.parseString("first,second.")aaron-mac:sql aaron$python s.py[['first']][['first']][[['first']]]Traceback (most recent call last): file "s.py",line 15,in <module>   print p.parseString("first,second.") file "/library/Python/2.6/site-packages/pyparsing.py",line 1032,in parseString   raise excpyparsing.ParseException: Expected "." (at char 5),(line:1,col:6)aaron-mac:sql aaron$

如何修改测试程序中的语法以解析以句点终止的逗号分隔名称列表?我查看了文档并试图找到一个实时支持列表,但我决定在这里得到回复.

解决方法 ‘|’ operator创建一个MatchFirst表达式,在该表达式中,在第一次匹配之前评估备选方案.

Pyparsing纯粹从左到右工作,尽可能将解析器表达式应用于输入字符串. pyparsing唯一的前瞻是你写入解析器的任何东西.

在这个表达式中:

a = Group( n | Group( n + OneOrMore( Suppress(",") + n )))

假设n只是一个字面上的“X”.如果给这个解析器输入字符串“X”,它显然会匹配前导,单独的n表达式.如果给定字符串“X,X,X”,它仍然只匹配前导n,因为这是解析器中的第一个替代.

如果你将表达式转为:

a = Group( Group( n + OneOrMore( Suppress(",") + n )) | n)

然后解析“X”它会首先尝试匹配列表,这将失败,然后匹配孤独的n.要解析“X,第一个选择将是列表表达式,它将匹配.

如果您想要匹配的最长替代方法,请使用’^’运算符,它提供Or表达式.或者将评估所有给定的替代品,然后选择最长的匹配.

a = Group( n ^ Group( n + OneOrMore( Suppress(",") + n )))

您还可以使用pyparsing helper方法delimitedList简化此 *** 作.解析用逗号分隔的相同表达式的列表是一种常见的情况,因此我不必看到人们不得不一遍又一遍地重新发明expr ZeroOrMore(Suppress(“,”)expr),我将delimitedList添加为标准的pyparsing助手. delimitedList(“X”)将匹配“X”和“X,X”.

总结

以上是内存溢出为你收集整理的python – 麻烦在pyparsing中进行简单的解析全部内容,希望文章能够帮你解决python – 麻烦在pyparsing中进行简单的解析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192634.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存