Instaparse: Как распознать новую строку

Я хочу разобрать текст файла, который содержит переводы строки. Файл может быть в Windows или Unix, но сейчас это файл Windows с таким содержимым:

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

Выше содержимое файла было прочитано с slurp и будет содержать новую строку. Вот грамматика, которую я пытаюсь использовать:

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

Эта грамматика также извлекается из файла, что, как мне кажется, облегчает задачу:

"Единственные экранирующие символы - это обычные экранирующие символы для строк и регулярных выражений (кроме того, instaparse также поддерживает строки внутри одинарных кавычек".)

Новая строка, кажется, не анализируется:

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

Что мне нужно установить <inside-comment> чтобы ошибка появилась на первой звезде второй строки, что будет указывать на то, что грамматика распознала символ новой строки?

2 ответа

Новые строки в Windows отображаются как \r\n, а в Unix как \n. Так что вам нужно что-то вроде:

'\ Г?\ П'

(Удвойте черные косые черты, если это внутри строки).

Это разбирает до конца:

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> работает, может быть есть более элегантный способ пройти через новую строку??

Другие вопросы по тегам