py解析

2024-06-16 13:53:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我被pyparsing中的这个错误卡住了

from pyparsing import Word,alphas,nums,Or,Regex,StringEnd
ws = Regex('\s*')
dot = "."
w = Word(alphas) + (ws | dot) + StringEnd()
w.leaveWhitespace()
w.parseString('AMIT.')

返回以下错误:

^{pr2}$

Tags: orfromimportws错误pyparsingdotregex
1条回答
网友
1楼 · 发布于 2024-06-16 13:53:23

|创建一个“match first”表达式,而不是“match longest”。在

第一种选择是regex,它将匹配0个或更多的空白字符。实际上,匹配,因此不会解析该点。在

下一个要分析的元素是StringEnd,但解析位置仍然位于“.”所以,失败!在

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

>>> 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)

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

  • |运算符改为^(匹配最长的而不是首先匹配)

  • 将regex更改为\s+,而不是\s*(这样匹配至少需要一个空格)

  • 将第二学期改为Optional(dot)

一般来说,对空白的显式测试与pyparsing的原理不一致pyparsing与re不同。在

相关问题 更多 >