2015-04-08 2 views
1

У меня есть такая линия:Split с несколькими пространствами и списками

AA  BB CC dd {ee ff} gg 

Я хотел бы разделить эту линию, но с сохранением списка, как:

AA BB CC dd {ee ff} gg 

поэтому я попытался split, но я получил множественные {} за счет многократного пространства между AA и BB

Я triied также

set splitted_line [regexp -all -inline {\S+} $list] 

, но эта команда разбивает список в {ee и ff}

Что я должен сделать, чтобы разделить мою линию правильно?

+1

Каковы правила _exact_ вы хотите для того, когда группа слов, которые должны храниться вместе, как один? –

+0

Элемент между {} должен оставаться вместе как список, а остальные слова остаются как отдельные элементы списка: splitted_line – heyhey

ответ

2

Если ваша строка действительно будет содержать { скобки-кавычки } слов в ней, вы можете уйти, просто рассматривая ее как список Tcl напрямую. В этом случае первый порт захода для «очистки» ее заключается в использовании lrange:

set splitted_line [lrange $list 0 end] 

Это также будет конвертировать некоторые другие вещи, такие как " двойных кавычках " слов; Я не знаю, хотите ли вы этого.
Пример сеанса:

% set example {A BB CCC {dd ee} "ff $gg" } 
A BB CCC {dd ee} "ff $gg"  
% lrange $example 0 end 
A BB CCC {dd ee} {ff $gg} 
+0

Да, это была цель, чтобы проанализировать списки, соответствующие Tcl. Эти команды работают отлично, спасибо – heyhey

+1

Если у вас уже есть Tcl-совместимые списки как строки, просто используйте их как списки; все делегаты списка делегируют код преобразования того же типа под капотом в любом случае. –

+0

Как бы «перечислить {*} $ example' сравнить, производительность? –

Смежные вопросы