如何在 Tcl 中使用 "regsub" 或 "regex" 从 "start" 句点中删除前导和尾随字符
How to use "regsub" or "regex" in Tcl to remove leading and trailing characters from a "start" period
使用 regex
和 regsub
函数从 sentence/line 中提取文本部分 - 左右。例如行:
- 学习课号@12.4.1@_01.html
我需要 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 {}]
正则表达式的方言略有不同。
为什么要求使用正则表达式?没有它,这个问题很容易解决,使用 split
和 lindex
:
set var "learning lesson number@12.4.1@_01.html"
puts [lindex [split $var @] 1]
使用 regex
和 regsub
函数从 sentence/line 中提取文本部分 - 左右。例如行:
- 学习课号@12.4.1@_01.html
我需要 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
:
set var [regsub {^.*@(.*)@.*$} $var {}]
正则表达式的方言略有不同。
为什么要求使用正则表达式?没有它,这个问题很容易解决,使用 split
和 lindex
:
set var "learning lesson number@12.4.1@_01.html"
puts [lindex [split $var @] 1]