English | Regex Split | |
|
Данный метод поможет обойти краеугольный камень ^текст.split[] и решить проблему вёрстки в сложных строках текста. Он похож на обычный split опциями разбиения, и на выходе так же возвращает объект класса table содержащий:
В качестве параметра regex нужно указывать регулярное выражение или текст описывающие только разделитель. Параметр delimiter не обязательный, может принимать следующие значения:
Сам метод:
######################################## # Разбивает строку по регулярным выражениям # # l - разбить слева направо (по-умолчанию); # r - разбить справа налево; # h - сформировать безымянную таблицу где части исходной строки помещаются горизонтально; # v - сформировать таблицу со столбцом piece, где части исходной строки помещаются вертикально (по-умолчанию). ##### @rsplit[text;regex;delimiter][table_split] ^if(def $text && def $regex){ $table_split[^table::create{piece}] $result[^text.match[(.*?)(?:$regex)][g]{^if(def $match.1){^table_split.append{$match.1}}}] ^if(def $result){^table_split.append{$result}} ^if(!def $delimiter){$delimiter[lv]} ^switch[^delimiter.lower[]]{ ^case[r;rv;vr]{$result[^table::create[$table_split;$.reverse(1)]]} ^case[rh;hr]{$result[^table::create[$table_split;$.reverse(1)]]$result[^result.flip[]]} ^case[h;lh;hl]{$result[^table_split.flip[]]} ^case[DEFAULT]{$result[$table_split]} } }{ ^throw[parser.runtime;rsplit;parameters ^$text and ^$regex must be defined] } ### End @rsplit[]
Примеры:
$text[12:01. 14:05, 18:00,21:20 Спортивные новости] Исходный текст: $textИсходный текст: 12:01. 14:05, 18:00,21:20 Спортивные новости
$parts[^rsplit[$text;[,\.]\s?]] Результат: ^parts.menu{$parts.piece}[ ]
$text[2004-12-22 13:30] Исходный текст: $textИсходный текст: 2004-12-22 13:30
$parts[^rsplit[$text;[^^0-9];r]] Результат: ^parts.menu{$parts.piece}[ ]
$text[2004/12//22] Исходный текст: $textИсходный текст: 2004/12//22
$parts[^rsplit[$text;/{1,2};rh]] Результат: ${parts.0}.${parts.1}.$parts.2
Powered by Parser 3 | Eugene Spearance |