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
$parts[^rsplit[$text;[,\.]\s?]] Результат: ^parts.menu{$parts.piece}[ ]
Исходный текст: 12:01. 14:05, 18:00,21:20 Спортивные новости
Результат: 12:01 14:05 18:00 21:20 Спортивные новости

$text[2004-12-22 13:30]
Исходный текст: $text
$parts[^rsplit[$text;[^^0-9];r]] Результат: ^parts.menu{$parts.piece}[ ]
Исходный текст: 2004-12-22 13:30
Результат: 30 13 22 12 2004

$text[2004/12//22]
Исходный текст: $text
$parts[^rsplit[$text;/{1,2};rh]] Результат: ${parts.0}.${parts.1}.$parts.2
Исходный текст: 2004/12//22
Результат: 22.12.2004
Powered by Parser 3 Eugene Spearance