我正在尝试在脚本中使用字符串映射功能。我有一个属性,其值如下所示:
{{1234||}{2345||}}
我想用空白字符和||}
替换所有开头的大括号
逗号,
。如何使用地图功能?
如何摆脱上面的括号?
答案 0 :(得分:1)
manual应该足够清楚,但以防万一...
set s "{{1234||}{2345||}}"
set result [string map {"{" "" "||}" ","} $s]
puts $result
# 1234,2345,}
string map
包含一个包含成对字符串的列表。在该列表中从左到右的每一对中,第一对将替换为第二对。
因此,在上文中,第一个{
将被替换为空白,并且完成后,||}
将被替换为,
。我使用引号是因为括号在Tcl中用于报价,如果您不太习惯Tcl中的报价机制,它可能无法始终如您所愿地工作。
尽管我不太确定以上是否是您要寻找的结果?如果要删除多余的string trimright
,则可以使用,}
,这将删除所有,
和}
的结尾字符:
string trimright $result ",}"
# 1234,2345
此外,您还可以使用反斜杠(\
)在Tcl中转义字符。
答案 1 :(得分:0)
最好的解决方案是如果要替换字符串的一部分,请使用regsub
:
set str {{1234||}{2345||}}
regsub -all {\{} $str "" str
regsub -all {\|\|\}} $str "," str
puts $str
答案 2 :(得分:0)
您始终可以使用list
(或其他列表操作)来建立映射项。这是使用交互式终端的好时机。
% list "{" "" "||}" ","
\{ {} ||\} ,
现在我们知道文字列表的样子,我们可以在脚本中使用它:
set s "{{1234||}{2345||}}"
set result [string map {\{ {} ||\} ,} $s]
puts "“$s” --> “$result”"
# “{{1234||}{2345||}}” --> “1234,2345,}”
当然,可能是您在告诉我们加引号的输入值:
set s {{1234||}{2345||}}
set result [string map {\{ {} ||\} ,} $s]
puts "“$s” --> “$result”"
# “{1234||}{2345||}” --> “1234,2345,”
(Unicode引号在测试时用于分隔输出字符串很有用,因为它们不会误认为输入值。)