Вопрос, возникающий из https://stackoverflow.com/a/53750697/856090 ответа.
Мы получаем "входную" строку.
Входная строка разбивается на несколько "команд" по +
сэто на \s+\+\s+
регулярное выражение.Однако при разбиении кавычки +
(\+
) должны игнорироваться.
Каждая команда затем разделяется на несколько «аргументов» пробельными символами, но кавычки (\
) пробела не учитываются при разбиении ивместо этого становится частью аргумента.
Цитируется \
(то есть \\
) становится обычным символом \
и сам не участвует в цитировании.
Мое решение заключается в обработкестрока ввода char-by-char со специальным поведением для \
, +
и пробельных символов.Это медленно и не элегантно.Я прошу альтернативное решение (например, с помощью регулярных выражений).
Я пишу на Python 3.
Например,
filter1 + \
chain -t http://www.w3.org/1999/xhtml -n error + \
transformation filter2 --arg x=y
преобразование filter3
становится
[['filter1'],
['chain', '-t', 'http://www.w3.org/1999/xhtml', '-n', 'error'],
['transformation', 'filter2', '--arg', 'x=y']]
и
a \+ b + c\ d
становится
[['a', '+', 'b'], ['c d']]