Instaparse:如何识别换行符

时间:2016-08-23 07:36:24

标签: instaparse

我想解析包含换行符的文件的文本。该文件可能在Windows或Unix中,但现在它是一个包含以下内容的Windows文件:

(**************
***************)

以上文件内容已使用slurp读入,并将包含换行符。这是我尝试使用的语法:

S = start-comment stars <inside-comment>
start-comment = '('
stars = '*' +
<inside-comment> = '\n' +

这个语法也从一个文件中悄悄进入,我相信这会使事情变得容易一些:

  

&#34;所需的唯一转义字符是字符串和正则表达式的普通转义字符(另外,instaparse也支持单引号字符串中的内容)。&#34;

新行似乎没有被解析:

Parse error at line 1, column 16:
(**************
               ^
Expected one of:
"\n"
"*"

我需要设置<inside-comment>以便错误出现在第二行的第一个星号上,这表明语法已识别换行符?

2 个答案:

答案 0 :(得分:3)

Windows中的换行符显示为\ r \ n,在Unix中显示为\ n。所以你需要这样的东西:

'\ r吗?\ n'

(如果它在字符串中,则加倍黑色)。

答案 1 :(得分:0)

这解析到最后:

S = start-comment stars <inside-comment-1> stars end-comment
start-comment = '('
end-comment = ')'
stars = '*' +
<inside-comment-1> = '\n' | '\r\n'
<inside-comment-2> = '\r?\n'

请注意,<inside-comment-2>不起作用。虽然<inside-comment-1>有效,但可能有一种更优雅的方式来越过换行符?