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