迭代列表中的项时,tcl获取正则表达式匹配

时间:2013-03-18 22:58:05

标签: regex list tcl match

我是新手,我在使用我的tcl脚本时遇到了一些麻烦。我在网上搜索过,似乎无法理解我做错了什么。这是我写的:

set list {f01-1 f01-2 f02-1 m01-1 m01-2 m02-1}
foreach item $list {
    if { [regexp {\w\d\d} $list match ] } {
        puts $match
    }
}

以下是我得到的输出:

f01
f01
f01
f01
f01
f01

然而,这是我希望并期望得到的:

f01
f01
f02
m01
m01
f02

有没有人对我的期望有任何建议?

提前谢谢你!

2 个答案:

答案 0 :(得分:4)

您的代码段似乎与您的实际代码不符,但我猜测$string$list的内容相同,这意味着您需要重复运行原始字符串上的正则表达式,而不是每个项目。此外,你的正则表达式是错误的。以下应该有效:

set list {f01-1 f01-2 f02-1 m01-1 m01-2 m02-1}
foreach item $list {
    if { [regexp {\w\d+} $item match ] } {
        puts $match
    }
}

除了修复正则表达式之外,这里的显着差异是它现在在$item而不是$list上运行。

答案 1 :(得分:0)

[regexp {\ w \ d \ d} $ list match] 会尝试在给定的列表中找到指定RE的第一个匹配项。

相反,你应该这样做:

[regexp {\ w \ d \ d} $ item match] 会检查每个项目,并在RE匹配时打印!