在tcl中使用正则表达式提取数字

时间:2014-03-25 20:08:58

标签: regex tcl

我是正则表达式的新手,仍然试图绕过它。我坚持这一点,所有与我的问题相关的问题似乎都没有帮助。

我有一个文字变量

set text "/folders/beta_0_2_1"

我想提取0,2,1并使用tcl中的regex将它们保存在三个不同的变量中。 我尝试使用

来通过beta变量
[regexp {/beta_} $text]

但是,我无法找出可以提取每个变量然后保存它们的部分。你能给我一些方向吗?

2 个答案:

答案 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