Удалить двойные кавычки из строки - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть строка вроде:

{"a/b"} {"c/d"} {"e/f"}

Я хочу выводить как:

a/b c/d e/f

В основном я хочу удалить все "и {} из существующей строки.

Как мне это сделать в TCL?

Я пытался использовать string trim, но не помогло.

set z {{"a/b"} {"c/d"} {"e/f"}}
set trimmed_z [string trim $z "\"\"\}\{"]

это дает

a/b"} {"c/d"} {"e/f

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Это похоже на список Tcl, в котором внутренние скобки находятся из-за символов " в элементах.Таким образом, все, что нам нужно сделать, это применить команду зачистки (довольно простую string trim) к каждому элементу;lmap делает это легко:

set yourData {{"a/b"} {"c/d"} {"e/f"}}
set yourCleanData [lmap elem $yourData {
    string trim $elem \"
}]
0 голосов
/ 21 февраля 2019

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
...