Python pyPEG2新行解析

Python pyPEG2新行解析,python,newline,pypeg,Python,Newline,Pypeg,我试图用它将MoinMoin标记转换为Markdown标记,在某些情况下,我需要注意换行符。然而,我甚至不能让我的新行解析测试工作。我是pyPEG新手,我的Python已经生锈了。请容忍我 代码如下: #!/usr/local/bin/python3 from pypeg2 import * import re class Newline(List): grammar = re.compile(r'\n') parse("\n", Newline) parse(""" """, Ne

我试图用它将MoinMoin标记转换为Markdown标记,在某些情况下,我需要注意换行符。然而,我甚至不能让我的新行解析测试工作。我是pyPEG新手,我的Python已经生锈了。请容忍我

代码如下:

#!/usr/local/bin/python3
from pypeg2 import *
import re

class Newline(List):
    grammar = re.compile(r'\n')

parse("\n", Newline)
parse("""
""", Newline)
这导致:

Traceback (most recent call last):
  File "./pyPegNewlineTest.py", line 7, in <module>
    parse("\n", Newline)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pypeg2/__init__.py", line 667, in parse
    t, r = parser.parse(text, thing)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pypeg2/__init__.py", line 794, in parse
    raise r
  File "<string>", line 2

    ^
SyntaxError: expecting match on \n
Success, of a sort.
这些组合的各种组合不会改变错误消息(尽管我不认为我尝试了所有组合)。将
Newline
更改为subclass
str
而不是
List
也不会更改错误

更新

我发现pypeg在解析新行之前正在剥离它:

#!/usr/local/bin/python3
from pypeg2 import *                 
import re
class Newline(str):
    grammar = contiguous(re.compile(r'a'))

parse("\na", Newline)
parse("""
a""", Newline)

print("Success, of a sort.")
运行此命令将导致:

Traceback (most recent call last):
  File "./pyPegNewlineTest.py", line 7, in <module>
    parse("\n", Newline)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pypeg2/__init__.py", line 667, in parse
    t, r = parser.parse(text, thing)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pypeg2/__init__.py", line 794, in parse
    raise r
  File "<string>", line 2

    ^
SyntaxError: expecting match on \n
Success, of a sort.
如果重写
换行符
parse
方法,我甚至看不到换行符。它得到的第一个字母是“a”。这与我在别处看到的情况是一致的。pypeg会去除所有前导空格,即使您指定了
连续


所以,这就是正在发生的事情。不知道该怎么办

Yes默认情况下,pypeg删除包括换行符在内的空格。 通过在
parse()
函数中设置可选的
whitespace
参数,可以轻松地进行配置,例如:

parse("\na", Newline, whitespace=re.compile(r"[ \t\r]"))
执行此操作时,仍将跳过空格和制表符,但不会跳过换行符
\n
。 在本例中,解析器现在可以正确地找到语法错误:

SyntaxError: expecting match on a