在tcl
中有没有办法在指定的字符串后删除所有字符?我已经看到很多关于删除所有帖子的帖子,包括字符串,但不是我希望做的。我有一个脚本,用于搜索带有后缀.sv
的文件名,但其中一些是.sv.**bunch of random stuff**
。而且我不需要随机的东西,因为它与我无关。
我已尝试使用不同的regsub
和string trim
命令,但它们也始终删除了.sv
。
附加到列表的结果类似于以下内容......
test_module_1.sv.random_stuff
test_module_2.sv.random_stuff
test_module_3.sv.random_stuff
test_module_4.sv.random_stuff
test_module_5.sv.random_stuff
等等
答案 0 :(得分:4)
使用regsub
时,可以放置正则表达式匹配的匹配部分。一个例子:
regsub {(\.sv).*} $str {\1} new
将删除.sv
及之后的任何内容(如果有)并将其替换为第一个匹配的组,即parens之间的部分,或者在这种情况下为.sv
,以便输入{{1} }}将成为example.sv.random
。
但是,您也可以像example.sv
一样轻松替换:
.sv
或者另一种不涉及替换的方法是将字符串的一部分放到regsub {\.sv.*} $str {.sv} new
部分:
.sv
此处string range $str 0 [expr {[string first ".sv" $str]+2}]
获取字符串中[string first ".sv" $str]
的位置(如果有多个,则会获得第一个),添加2个字符(.sv
之后sv
2个字符长).
获取所有字符,包括string range
。
或者如果你想坚持使用正则表达式:
.sv
regexp {.+?\.sv} $str match
将包含结果字符串。使用的表达式包括所有字符,包括$match
。