Tokenize a string with escaping

Напишите функцию или программу, которые могут разбивать строку на каждое неэкранированное вхождение символа разделителя.

Он должен принимать три входных параметра:

Строка Символ разделителя Управляющий символ

Он должен вывести список строк.

Правила разделения:

Поля, разделенные разделителями, становятся элементами выходного списка. Пустые поля должны быть сохранены, даже в начале и в конце.

Правила побега:

«Escaped» означает, что предшествует появление escape-символа, который еще не сбежал. Когда escape-символ предшествует персонажу, который не имеет особого значения, он по-прежнему считается побегом (но не делает ничего особенного). Каждое появление escape-символа, которое использовалось для выхода из него, не должно становиться частью выхода.

Продемонстрируйте, что ваша функция удовлетворяет следующему тестовому сценарию: заданная строка

 один ^ | у || три ^^^^ | четыре ^^^ | ^ куатро | 
и использование
 | 
как разделитель и
 ^ 
как escape-символ, ваша функция должна выводить следующий массив:

 ['one | uno', ", 'three ^^', 'four ^ | quatro',"]