首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyparsing错误

pyparsing错误
EN

Stack Overflow用户
提问于 2012-02-08 14:54:08
回答 1查看 4.6K关注 0票数 6

我在pyparsing中遇到了这个错误。

代码语言:javascript
复制
from pyparsing import Word,alphas,nums,Or,Regex,StringEnd
ws = Regex('\s*')
dot = "."
w = Word(alphas) + (ws | dot) + StringEnd()
w.leaveWhitespace()
w.parseString('AMIT.')

返回以下错误:

代码语言:javascript
复制
ParseException: Expected end of text (at char 4), (line:1, col:5)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-08 15:14:40

|创建一个“匹配优先”表达式,而不是“匹配时间最长”。

第一个替代方法是正则表达式,它将匹配0个或更多空格字符。实际上,这是匹配的,所以点不会被解析。

那么下一个要解析的元素是StringEnd,但是解析位置仍然位于‘.’-所以,失败!

下面是通过将setDebug()调用添加到语法表达式中的一些更详细的输出:

代码语言:javascript
复制
>>> w = Word(alphas).setDebug() + (ws.setDebug() | dot.setDebug()) + StringEnd()
>>> w.parseString('AMIT.')
Match W:(abcd...) at loc 0(1,1)
Matched W:(abcd...) -> ['AMIT']
Match Re:('\\s*') at loc 4(1,5)
Matched Re:('\\s*') -> ['']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python26\lib\site-packages\pyparsing-1.5.6-py2.6.egg\pyparsing.py", line 1032, in parseString
    raise exc
pyparsing.ParseException: Expected end of text (at char 4), (line:1, col:5)

要让你的语法正常工作,你可以:

  • |运算符更改为^ (匹配最长时间而不是先匹配)
  • 将正则表达式更改为\s+而不是\s* (以便将match)
  • change Optional(dot)

更改为\s*至少需要一个空格

一般来说,对空格的显式测试与pyparsing哲学不一致--pyparsing与re不同。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9188965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档