我的列表:
set myList "{
{key value} {key1 value1}
{
{key2 value2} {key3 value3}
}
}"
预期输出:
{{key value} {key1 value1} {{key2 value2} {key3 value3}}}
目前为止我尝试的方法是:
set myList [string trim $myList]
set newList [string map {\n "" \t " "} $myList]
regsub -all {^\{\s+\{} $newList "{{" newList ; # start of list
regsub -all {\}\s+\}$} $newList "}}" newList ; # end of list
regsub -all {\}\s+\{} $newList "} {" newList ; # middle of list
regsub -all {\{\s+\{} $newList "{{" newList ; # middle of list again
regsub -all {\}\s+\}} $newList "}}" newList ; # middle of list again and again
它的工作,但我已经使用了许多regsub
命令。有可能限制他们吗?或不同的方法,没有regsub
...
2条答案
按热度按时间olmpazwi1#
首先,在Python 8.6中使用
regsub
需要两个脚本,其中一个明显很难看(使用lookaheads):在8.7中,您可以使用
-command
选项(因为在某些情况下您需要不同的取代基)来处理RE,但RE本身会更难看。没有
regsub
也可以实现,但前提是您知道要规范化的深度(即,逻辑结构是什么);对于您来说,两次就足够了:命令
list {*}$thing
与concat $thing
非常相似,除了它是一个适当的列表原生命令。concat
* 不是 *(我们有测试用例来证明这一点)。vh0rcniy2#
这将删除每行的前导/尾随空格以及换行符
不过,它确实删除了子列表之间的空格。