Tcl 去除从文件名开始,但不在扩展名之前

Tcl 去除从文件名开始,但不在扩展名之前,tcl,Tcl,我有一个文件名e938.564.872.doc和t729.659.5631.xlx,我想删除它们的名称,所以看起来应该像e938564872.doc和t7296595631.xlx等 我试过了 set arg[string map{.{}}$arg]但它也删除了包括.doc在内的所有点。你能帮我吗。要用正则表达式匹配除最后一个点以外的所有点,请执行以下操作: '\.(?=[^.]*\.)' 要将除最后一个点以外的所有点与正则表达式匹配,请执行以下操作: '\.(?=[^.]*\.)' 也许是

我有一个文件名e938.564.872.doc和t729.659.5631.xlx,我想删除它们的名称,所以看起来应该像e938564872.doc和t7296595631.xlx等 我试过了
set arg[string map{.{}}$arg]
但它也删除了包括.doc在内的所有点。你能帮我吗。

要用正则表达式匹配除最后一个点以外的所有点,请执行以下操作:

'\.(?=[^.]*\.)'

要将除最后一个点以外的所有点与正则表达式匹配,请执行以下操作:

'\.(?=[^.]*\.)'
也许是这样

set arg e938.564.872.doc
set rn [file rootname $arg]
set ex [file extension $arg]
set res [join [split $rn .] {}]$ex
# => e938564872.doc
(或:)

后一种方法也要快得多

文档:,

像这样吗

set arg e938.564.872.doc
set rn [file rootname $arg]
set ex [file extension $arg]
set res [join [split $rn .] {}]$ex
# => e938564872.doc
(或:)

后一种方法也要快得多


文档:,

我会使用
字符串映射{.“}
来去除点,否则就是正确的。是的。我想既然OP使用了这种方法,我不妨展示另一种方法。但是它值得添加到答案中。我会使用
字符串映射{.“}
来去除这些点,否则这是正确的。是的。我想既然OP使用了这种方法,我不妨展示另一种方法。但值得把它添加到答案中。