如何在 Tcl 中使用 "regsub" 或 "regex" 从 "start" 句点中删除前导和尾随字符

How to use "regsub" or "regex" in Tcl to remove leading and trailing characters from a "start" period

使用 regexregsub 函数从 sentence/line 中提取文本部分 - 左右。例如行:

我需要 regsub and/orregex 只留下“@”之间的片段。

Staying like this: 12.1.4 the rest can erase all the left and right surplus.

在另一种情况下,在 Bash 而不是 Tcl。我可以这样做:

我问这个问题,更多是为了教学。也就是学习使用这门Tcl语言的原生特性,而不是依赖类Unix系统命令本身。

我如何制作一个正则表达式来执行这个命令?提前致谢...

我更喜欢选择 @ 个字符之间的文本。为此,我们使用 regexp (带有捕获组)。在这种情况下,非贪婪的内部部分是最简单的。

regexp {@(.*?)@} $var -> wantedBit
puts $wantedBit

请注意,-> 是此处的虚拟变量名称,它采用匹配的整个文本(我们对此不感兴趣)。

可以使用 regsub:

使代码看起来更像 sed 代码
set var [regsub {^.*@(.*)@.*$} $var {}]

正则表达式的方言略有不同。

为什么要求使用正则表达式?没有它,这个问题很容易解决,使用 splitlindex:

set var "learning lesson number@12.4.1@_01.html"
puts [lindex [split $var @] 1]