Tcl删除字符串后的所有字符而不删除字符串

时间:2015-08-14 18:53:06

标签: regex tcl

tcl中有没有办法在指定的字符串后删除所有字符?我已经看到很多关于删除所有帖子的帖子,包括字符串,但不是我希望做的。我有一个脚本,用于搜索带有后缀.sv的文件名,但其中一些是.sv.**bunch of random stuff**。而且我不需要随机的东西,因为它与我无关。

我已尝试使用不同的regsubstring 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

等等

1 个答案:

答案 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