| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Без удаления переносов:
сделает 2 группы:
|
| Автор: Serebrus 7.2.2012, 08:28 |
| Keeper89, а в случае если ответы много строчные, т.е: 1a)ccccc fff vvvv vvvv что можно сделать? |
| Автор: MetalFan 7.2.2012, 08:50 | ||||
Отказаться от регулярок и распарсить линейно. Добавлено @ 08:54 Разбор построчно:
должен быть включен roMultiLine (если пользуется делфевая обертка TRegEx-TPerlRegEx) или модификатор m. т.е.
|
| Автор: Serebrus 14.2.2012, 07:19 |
| MetalFan, спасибо |