2

我是一个新手,我在让我的 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

有没有人有任何建议来获得我的期望?

提前谢谢你!

4

2 回答 2

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
    }
}

除了修复您的正则表达式之外,这里的显着区别是它现在运行它 on$item而不是 on $list

于 2013-03-18T23:05:11.277 回答
0

[regexp {\w\d\d} $list match]将尝试在给定的list中查找指定 RE 的第一次出现。

相反,您应该这样做:

[regexp {\w\d\d} $item match ]它将检查每个项目并打印 RE 是否匹配!

于 2013-04-18T11:24:51.613 回答