gpt4 book ai didi

string - 如何在 tcl 中执行子字符串提取和替换

转载 作者:行者123 更新时间:2023-12-01 10:04:21 26 4
gpt4 key购买 nike

我正在尝试从 Tcl 中的字符串中提取子字符串。我写了代码并且能够做到,但我想知道是否还有其他有效的方法来做到这一点。所以确切的问题是我有一个字符串

name_ext_10a.string_10a.string.string.string

我想提取“name_ext”,然后删除“_”并将其替换为“.”;我最终希望输出为“name.ext”。我写了这样的东西:

set _File "[string replace $_File [string last "_" $_File] [string length $_File] "" ]"
set _File "[string replace $_File [string last "_" $_File] [string length $_File] "" ]"
set _File "[string replace $_File [string last "_" $_File] [string last "_" $_File] "." ]"

这给了我想要的确切输出,但我想知道在 Tcl 中是否有任何其他有效的方法来执行此操作。

最佳答案

您可以使用下划线作为分隔符拆分该文件名,然后用点连接前 2 个元素:

% set f name_ext_10a.string_10a.string.string.string
name_ext_10a.string_10a.string.string.string
% set out [join [lrange [split $f _] 0 1] .]
name.ext

编辑

所以如果“name”可以有任意数量的下划线:

set f "foo_bar_baz_ext_10a.string_10a.string.string.string"
set pieces [split $f _]
set name [join [lrange $pieces 0 end-3] _]
set out [join [list $name [lindex $pieces end-2]] .] ;#==> foo_bar_baz.ext

但这变得越来越复杂。一个正则表达式就足够了——我假设“字符串”可以是任何非下划线字符序列。

set string {[^_]+}
set regex "^(.+)_($string)_10a.${string}_10a.$string.$string.$string\$"
regexp $regex $f -> name ext
set out "$name.$ext" ;#==> foo_bar_baz.ext

关于string - 如何在 tcl 中执行子字符串提取和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12168576/

26 4 0
文章推荐: java - 服务器响应设置 boolean 值 true/false
文章推荐: emacs - If 语句/字符串比较
文章推荐: java - Dozer 从 Set 映射到 List