2012-02-08 3 views
3

Iは、次のようなエラーが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.') 

を返しpyparsingにこのエラーで立ち往生しています:

ParseException: Expected end of text (at char 4), (line:1, col:5) 
+0

ParseException:期待されるテキストの終了(char 4)、(行:1、col:5) –

+0

いいえ、StringEndは定義されていません。私はここにそれを書くのを忘れた –

答えて

5

|は "最長一致" ではない、 "一致最初の" という表現を作成します。

最初の選択肢は、0個以上の空白文字と一致する正規表現です。実際には、と一致するため、ドットは解析されません。

次に解析する次の要素はStringEndですが、解析位置はまだ '.'- so、fail!'にあります。あなたでし動作するようにあなたの文法を取得するには

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

:ここ

setDebug()あなたの文法表現への呼び出しを追加することによって、いくつかのより詳細な出力をある

  • 変更|オペレータ^に(試合最初に一致するのではなく最長)

  • 正規表現をに変更します代わり\s*

  • 変化(少なくとも1つのスペースが一致ために必要であったように)Optional(dot)一般に

への第2項は、空白の明示的な試験はpyparsingのphilosophy-と一致しませんpyparsingはreと同じではありません。

関連する問題