Tcl 删除字符串后的所有字符而不删除字符串
Tcl Remove all characters after a string without removing the string
在tcl
中有没有办法trim输出指定字符串后的所有字符?我已经看到很多关于删除所有内容并包括字符串的帖子,但不是我希望做的。我有一个脚本可以搜索后缀为 .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
等等等等
当您使用 regsub
时,您可以放置正则表达式模式的匹配部分。一个例子:
regsub {(\.sv).*} $str {} 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
在字符串中的位置(如果有多个就取第一个),在[=24=之后添加2个字符(sv
] 是 2 个字符),string range
获取所有字符,包括 .sv
.
或者如果您想坚持使用正则表达式:
regexp {.+?\.sv} $str match
$match
将包含结果字符串。使用的表达式抓取所有字符,包括 .sv
.
在tcl
中有没有办法trim输出指定字符串后的所有字符?我已经看到很多关于删除所有内容并包括字符串的帖子,但不是我希望做的。我有一个脚本可以搜索后缀为 .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
等等等等
当您使用 regsub
时,您可以放置正则表达式模式的匹配部分。一个例子:
regsub {(\.sv).*} $str {} 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
在字符串中的位置(如果有多个就取第一个),在[=24=之后添加2个字符(sv
] 是 2 个字符),string range
获取所有字符,包括 .sv
.
或者如果您想坚持使用正则表达式:
regexp {.+?\.sv} $str match
$match
将包含结果字符串。使用的表达式抓取所有字符,包括 .sv
.