You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Tcl的regexp提取/与;之间的字符串?

解决TCL正则提取目标字符的问题

我来帮你搞定这个正则匹配的需求!先理清楚你的场景:
你已经将目标字符串赋值给变量:

set f "cat/bat/d;hen/jeep/e;ink/kin/l;"

你期望提取出每个分块里/和;之间的最后一段字符,最终输出d ; e ; l,但之前的正则表达式匹配到的是包含/和;的完整片段,接下来给你两种可行的解决方案:

方案一:使用零宽断言直接匹配目标字符

这个方法可以直接捕获你需要的内容,不需要额外处理捕获组:

# 直接匹配每个目标字符
set result [regexp -all -inline {(?<=/)[^/;]+(?=;)} $f]
# 用指定格式连接结果
puts [join $result " ; "]

正则解释:

  • (?<=/):反向零宽断言,确保匹配的内容前面是/
  • [^/;]+:匹配一个或多个**既不是/也不是;**的字符,也就是我们要的d、e、l
  • (?=;):正向零宽断言,确保匹配的内容后面是;

方案二:使用捕获组提取内容

如果你习惯用捕获组的方式,也可以这样写:

# 捕获目标字符所在的组
set matches [regexp -all -inline {/([^/;]+);} $f]
# 提取所有捕获组的结果(索引1、3、5对应每个分组内容)
set target [lmap idx {1 3 5} {lindex $matches $idx}]
# 连接成期望的格式
puts [join $target " ; "]

正则解释:

  • /([^/;]+);:匹配/开头、;结尾的片段,并用括号捕获中间的目标字符
  • 因为regexp -all -inline会返回完整匹配串+捕获组内容的列表,所以需要提取奇数索引的元素(从0开始计数)

执行任意一种方案,都能得到你想要的d ; e ; l输出~

内容的提问来源于stack exchange,提问作者Varsha Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:14:42