0

我正在尝试在我的脚本中使用字符串映射函数。我有一个属性,其值如下所示:

{{1234||}{2345||}}

||}我想用空白字符和逗号替换所有打开的大括号,。如何使用地图功能?

如何摆脱上面的大括号?

4

3 回答 3

2

手册应该足够清楚,但以防万一......

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 中使用反斜杠 ( \) 转义字符。

于 2019-05-07T16:11:54.920 回答
0

regsub如果要替换字符串的一部分,最好的解决方案是使用:

set str {{1234||}{2345||}}
regsub -all {\{} $str "" str
regsub -all {\|\|\}} $str "," str
puts $str
于 2019-05-07T15:16:39.720 回答
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 引号对于在测试时分隔输出字符串很有用,因为它们不会被误认为是输入值。)

于 2019-05-07T22:13:04.040 回答