Tcl删除字符串后的所有字符而不删除字符串
在tcl
有没有办法删除指定字符串后的所有字符?我已经看到很多关于删除所有文件后的帖子,包括字符串,但不是我希望做的。我有一个脚本,搜索文件名后缀.sv
,但其中一些是.sv.**bunch of random stuff**
。我不需要随机的东西,因为它与我无关。Tcl删除字符串后的所有字符而不删除字符串
我已经尝试过不同的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
等等等等
当您使用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
。
有一些匹配附加到列表中,它似乎适用于第一个,但是然后完全清除列表的其余部分(因为它们在.sv之后)。有什么办法可以防止这种情况发生? –
@LiamP所以你有一个字符串列表?遍历每一个并应用上述选项之一。 – Jerry
谢谢你在循环中使用它的工作非常好! –
请提供一个可重现的例子。 –