我正在尝试在我的脚本中使用字符串映射函数。我有一个属性,其值如下所示:
{{1234||}{2345||}}
||}
我想用空白字符和逗号替换所有打开的大括号,
。如何使用地图功能?
如何摆脱上面的大括号?
我正在尝试在我的脚本中使用字符串映射函数。我有一个属性,其值如下所示:
{{1234||}{2345||}}
||}
我想用空白字符和逗号替换所有打开的大括号,
。如何使用地图功能?
如何摆脱上面的大括号?
手册应该足够清楚,但以防万一......
set s "{{1234||}{2345||}}"
set result [string map {"{" "" "||}" ","} $s]
puts $result
# 1234,2345,}
string map
接受一个包含一对字符串的列表。在该列表中从左到右的每一对中,第一个将被第二个替换。
因此在上面, first{
将被替换为空白,完成||}
后将被替换为,
. 我使用引号是因为大括号用于 Tcl 中的引用,如果您不太习惯 Tcl 中引用机制的工作方式,它可能不会总是按您希望的方式工作。
虽然我不太确定以上是否是您正在寻找的结果?string trimright
如果你想删除额外的,你可以使用,}
,这将删除所有尾随字符,
和}
:
string trimright $result ",}"
# 1234,2345
另请注意,您在 Tcl 中使用反斜杠 ( \
) 转义字符。
regsub
如果要替换字符串的一部分,最好的解决方案是使用:
set str {{1234||}{2345||}}
regsub -all {\{} $str "" str
regsub -all {\|\|\}} $str "," str
puts $str
您始终可以使用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 引号对于在测试时分隔输出字符串很有用,因为它们不会被误认为是输入值。)