string trim
удалит только символы на концах строки, то есть только в начале и в конце.Вы можете использовать string map
:
set z {{"a/b"} {"c/d"} {"e/f"}}
set clean_z [string map {\" "" \{ "" \} ""} $z]
# a/b c/d e/f
В противном случае, поскольку строка выглядит как список Tcl, вы можете использовать lmap
(Tcl 8.6+) дляполучить «самый внутренний элемент подсписка»:
set clean_z [lmap x $z {set x [lindex $x 0]}]
# a/b c/d e/f
Есть и другие способы сделать это;может быть цикл и string trim
(здесь нам нужно только удалить кавычки, потому что здесь фигурные скобки действуют как механизм цитирования):
set z {{"a/b"} {"c/d"} {"e/f"}}
set cleaned_z ""
foreach n $z {
lappend cleaned_z [string trim $n \"]
}
puts $cleaned_z
# a/b c/d e/f
или struct::list flatten
:
package require struct
set z {{"a/b"} {"c/d"} {"e/f"}}
set cleaned_z [struct::list flatten $z]
# a/b c/d e/f
Или, если вы хотите использовать регулярное выражение, используя regsub
:
set z {{"a/b"} {"c/d"} {"e/f"}}
# I'm only escaping the quote so the syntax highlighting doesn't break, but it's not
# necessary
set cleaned_z [regsub -all {[\"{}]} $z ""]
# a/b c/d e/f