我在删除TCL中的字符时遇到问题。
我有一个包含3个元素的变量:
> puts $scan_ports
scan_clkvco_clk scan_clkvco_div_2_clk scan_clkin_clk
我想将另一个相同的3个元素保存在另一个变量中,但是在每个元素的末尾删除_clk
。
这是我尝试过的:
regsub -all "_clk" $scan_ports "" scan_groups
但它会删除所有_clk
个匹配项
预期结果应该是:
puts $scan_groups
> scan_clkvco scan_clkvco_div_2 scan_clkin
答案 0 :(得分:1)
除非您尚未将npm update new-name
的值作为Tcl列表对待,否则您可能还需要考虑使用string map
映射后缀:
scan_ports
如果已经有一个列表,或者打算在后续步骤中用作列表,那么Donal的解决方案很可能是可行的方法。
答案 1 :(得分:0)
您可以使用end of word anchor:
regsub -all {_clk\M} $scan_ports "" scan_groups
# scan_clkvco scan_clkvco_div_2 scan_clkin
注意:通常,将大括号与re一起使用也更好。
答案 2 :(得分:0)
这是lmap
可以提供帮助的地方,您确实应该使用锚定匹配。
lmap sp $scan_ports {regsub {_clk$} $sp ""}
这样做的话,就不会对foo_clk_bar_clk boo_clk
这样的元素做奇怪的事情。