2015-08-14 207 views
-1

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

我已经尝试过不同的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 

等等等等

+0

请提供一个可重现的例子。 –

回答

4

当您使用regsub您可以将一个正则表达式匹配匹配部分。一个例子:

regsub {(\.sv).*} $str {\1} new 

可否如果任何后除去.sv和任何和替换使得由第一匹配组,即括号之间的部分,或在这种情况下,.sv使得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]在字符串中获得.sv的位置(如果有多个,它将​​得到第一个),在.之后加上2个字符(sv)长度为2个字符),并且string range可以获得所有字符,包括.sv

或者,如果你想坚持用正则表达式:

regexp {.+?\.sv} $str match 

$match将包含结果字符串。使用的表达式抓取所有字符,包括.sv

+0

有一些匹配附加到列表中,它似乎适用于第一个,但是然后完全清除列表的其余部分(因为它们在.sv之后)。有什么办法可以防止这种情况发生? –

+0

@LiamP所以你有一个字符串列表?遍历每一个并应用上述选项之一。 – Jerry

+0

谢谢你在循环中使用它的工作非常好! –