0

regex使用and函数从句子/行中提取文本部分regsub- left 和 right。例如这一行:

  • 学习课号@12.4.1@_01.html

我需要regsub和/或regex只留下“@”之间的片段。

保持这样:12.1.4 剩下的可以擦掉所有的左右剩余。

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

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

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

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

4

2 回答 2

3

为什么需要使用正则表达式?没有它,这个问题可以很容易地解决,使用splitand lindex

set var "learning lesson number@12.4.1@_01.html"
puts [lindex [split $var @] 1]
于 2019-12-30T10:44:03.933 回答
1

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

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

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

可以使代码看起来更像 sed 代码regsub

set var [regsub {^.*@(.*)@.*$} $var {\1}]

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

于 2019-12-30T07:31:43.947 回答