我是正则表达式的新手,仍然试图绕过它。我坚持这一点,所有与我的问题相关的问题似乎都没有帮助。
我有一个文字变量
set text "/folders/beta_0_2_1"
我想提取0,2,1并使用tcl中的regex将它们保存在三个不同的变量中。 我尝试使用
来通过beta变量[regexp {/beta_} $text]
但是,我无法找出可以提取每个变量然后保存它们的部分。你能给我一些方向吗?
答案 0 :(得分:4)
你可以像这样使用它:
regexp {/beta_([0-9]+)_([0-9]+)_([0-9]+)} $text -> num1 num2 num3
然后你可以使用变量:
puts "$num1 $num2 $num3"
# => 0 2 1
顺便说一句,{p> ->
是一种惯例。这个变量(是的,它的一个!)将包含整个匹配。
作为旁注,你也可以用下划线拆分它:
lassign [split $text "_"] - num1 num2 num3
puts "$num1 $num2 $num3"
# => 0 2 1
答案 1 :(得分:3)
提取所有数字序列:
% set text "/folders/beta_0_2_1"
/folders/beta_0_2_1
% regexp -inline -all {\d+} $text
0 2 1
% lassign [regexp -inline -all {\d+} $text] a b c
% puts $a; puts $b; puts $c
0
2
1