Разбор строки по шаблону

52 views
Skip to first unread message

Famos

unread,
Feb 9, 2011, 6:52:20 AM2/9/11
to moscow alt.net
Не могу найти простого решения следующей проблемы:
Есть строка
20. M2[69x182] p3=~(p1~p2+~p1p2), образцы 1[16x14];; точки (10,116) #1
mark1 In1;;(10,24) #2 mark1 In2;;(45,152);;(28,6);;(61,60) #3 mark4
Out;;(45,60)

хотелось бы ее распарсить.

Руками писать парсер долго и не хочется. (тем более у меня 5 разных
строк )
Смотрел в сторону ANTLR, но думаю, что это как стрелять из пушки по
воробьям.
Существует ли способ описать шаблон типо "{value1};{value2} ..." и
получить заполненный класс?

Maxim Moiseev

unread,
Feb 10, 2011, 5:27:45 AM2/10/11
to moscow...@googlegroups.com
Всё зависит от конкретных строк. Но если всего 5 вариантов, думаю, регулярные выражения решат проблему. Прямо в объект не получится, но максимально близко к этому.

Famos

unread,
Feb 10, 2011, 5:56:27 AM2/10/11
to moscow alt.net
С регулярными выражениями у меня проблемы:)
Выучу заодно:)

Хотя лучше бы что-нибудь по приятней...

On 10 фев, 13:27, Maxim Moiseev <maxim.mois...@gmail.com> wrote:
>    - Регулярные выражения?
>    -http://irony.codeplex.com/
>    - Lexx & Yacc (хотя, это сродни ANTLRу)

Maxim Moiseev

unread,
Feb 11, 2011, 1:49:35 AM2/11/11
to moscow...@googlegroups.com
Поправьте меня кто-нибудь, если я заблуждаюсь, но, имхо, регулярные выражения -- это наше всё. В любом случае, они ещё не раз пригодятся, если их сейчас понять и научиться использовать.

Vitaly Baum

unread,
Feb 11, 2011, 4:11:26 AM2/11/11
to moscow...@googlegroups.com
Поддерживаю идею с регулярными выражениями, если это разовая задача. 
Если regexp изучать лень/нет желания, то можно самому написать небольшой парсер. 

2011/2/11 Maxim Moiseev <maxim....@gmail.com>

Алексей Петряшев

unread,
Feb 11, 2011, 5:10:31 AM2/11/11
to moscow...@googlegroups.com
Регулярные выражения это такая штука, что если постоянно ими не заниматься, то потом нужно заново читать мануалы. И поддерживать их очень сложно. Однако, если выражения для разбора не меняются или меняются очень редко, то это хороший выбор.
А создание собственных DSL для разовых задач - это уже слишком.

11 февраля 2011 г. 12:11 пользователь Vitaly Baum <vital...@gmail.com> написал:

Vasily Povalyaev

unread,
Feb 12, 2011, 1:35:35 AM2/12/11
to moscow alt.net
Шутка: "Если у вас есть проблема и вы решили ее решать с помощью
регулярных выражений, то теперь у вас две проблемы". Как известно, в
каждой шутке есть доля шутки)
в плане alt'овости предлагаю посмотреть на fslex и fsyacc [аналоги lex
и yacc с ocaml'а, портированные под f#].
имхо, заморачиваться с серьезным парсингом имеет смысл если число
ваших строк превышает, например, 100 и блещет некоторым разнообразием.
если же разнообразия никакого, то можете разобрать вашу строку
последовательными indexof и substring по каким-то характерным реперным
точкам [они же есть?].

Famos

unread,
Feb 12, 2011, 2:47:25 PM2/12/11
to moscow alt.net
Да, я согласен что в столь малом разнообразии строк не стоит
замарачиваться, просто интересно было узнать как это делаю другие,
может есть простой способ...
Реперные точки конечно есть:)
Reply all
Reply to author
Forward
0 new messages