Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > регулярное выражение с "границами"


Автор: Serebrus 6.2.2012, 15:35
Доброго времени суток всем.
Как вам известно \b определяет границы. Есть такой текст:
1.
1a) aaaaaaaa
1b) bbbbbbb
2a) cccccc ccc
2b) dd ppp
2c) eeeeeeeee
3a) ffffffff
3c) ggggg
2.
1a) nnn nn
1c) wwwww
2a) bbbbbbb
2b) ddd vvvv
3a) cccccc
3b) dd ppp
.... и т.д.

Текст вертикальный в виде теста. Его надо перестроить в табличную форму, т.е.
_____________________________________________________________________________
#  |       1a)     |        1b)   |       1c)    |       2a)     |      2b)    |          2c)     |   3a)   |     3b)   |    3c)   |
_____________________________________________________________________________
1. | aaaaaaaa | bbbbbbb |                | cccccc ccc | dd ppp    | eeeeeeeee | ffffffff  |             | ggggg |
2. | nnn nn      |                | wwwww | bbbbbbb  | ddd vvvv |                    | cccccc | dd ppp |            |

......
_____________________________________________________________________________

После удаления \r\n:
Для выризания 1a): /\b1a\)(.+)1[b|c]\)\b/ - но если 1b) и 1c) не участвуют то эта регулярка не работает корректно.
Если для 1a): /\b1a\)(.+)[1b|1c|2a]\)\b/ - то в этом случае регулярка возвращает всех трех значений (1b, 1c, 2a) в одном 1a

Как можно это организовать правильно?

Автор: Keeper89 6.2.2012, 16:59
Без удаления переносов:
Код

(\w[a-c]\)) (.+$)

сделает 2 группы:
  • номер, включая скобку
  • текст

Автор: Serebrus 7.2.2012, 08:28
Keeper89, а в случае если ответы много строчные, т.е:
1a)ccccc
fff
vvvv vvvv

что можно сделать?

Автор: MetalFan 7.2.2012, 08:50
Цитата(Serebrus @  7.2.2012,  08:28 Найти цитируемый пост)
что можно сделать? 

Отказаться от регулярок и распарсить линейно.

Добавлено @ 08:54
Разбор построчно:

Код

^(\d\w\)) (.+)$

должен быть включен roMultiLine (если пользуется делфевая обертка TRegEx-TPerlRegEx) или модификатор m.
т.е.
Код

(?m)^(\d\w\)) (.+)$
или
/^(\d\w\)) (.+)$/m


Автор: Serebrus 14.2.2012, 07:19
MetalFan, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)