Pull to refresh

Comments 7

А расскажите поподробнее, как вы отличаете кавычки в кавычках от двух пар кавычек.
Вот пример фразы на английском языке:
"I think," said the rabbit," that so-called "deep hole", as you might say, is not so "deep"."
Кстати, парсер хабра отформатировал это так:
«I think,» said the rabbit," that so-called «deep hole», as you might say, is not so «deep»."
Хотелось бы применить проект для агрегатора новостей, а разные издатели используют разные схемы — где-то прямой и обратный апостроф для прямой речи, где-то двойные кавычки, где-то наклонные кавычки.

Сначала идет поиск вложенных кавычек (не содержащих в себе кавычки), затем внешние, пока не закончатся.
Ваш пример я сам не сразу понял из-за кавычки после rabbit, тайпус тоже )
Если ее поправить — все гуд:


“I think,” said the rabbit, “that so-called ‘deep hole’, as you might say, is not so ‘deep’.”

Ну и все типы кавычек будут заменены на выбранный стиль. Вначале весь этот зоопарк приводится к одному виду.

Опечатка была допущена специально. Значит, вы всё же как-то отличаете по пунктуации вложенные кавычки и прямую речь ( [A ] B [ C] против [A [ B ] C] ). Вот я и спрашиваю: как именно? Набор регулярных выражений или более сложная грамматика?

Конечно отличаю. Регулярками. В основном, смотрю, что раз кавычка прилипает слева, значит, это закрывающая, а если справа — открывающая.
Ваш пример мне самому было тяжело понять, к сожалению, для таких кейсов у меня нет решения. Парсер не понимает тексты.

Лушче строить полноценное синтаксическое дерево, чем парсить регулярками.
Многократное применение регулярных выражений для ограниченной максимальной глубины рекурсии в подобных задачах эквивалентно синтаксическому дереву, но зачастую работает гораздо быстрее за счёт компилирования регулярных выражений, меньшего количества копирований и созданий временных объектов.
С кавычками у нас обычно всего один или два уровня вложенности. Со скобками очень редко больше трёх.
Sign up to leave a comment.

Articles