如果名称Wbay1
,...,Wbay9
,您可以使用
if {[string match {Wbay[1-9]} $parname]} {
set $parname [lindex $elem 1]
}
如果数字部分可以大于9 ,您应该使用
if {[regexp {Wbay\d+} $parname]} {
set $parname [lindex $elem 1]
}
A regexp
(正则表达式)匹配比字符串匹配更强大。在这种情况下,\d+
表示“一个或多个数字”。
如果你想记录到目前为止你见过的最高数量,使用
set maxN 0
...
if {[regexp {Wbay(\d+)} $parname -> n]} {
set maxN [expr {max($n, $maxN)}]
set $parname [lindex $elem 1]
}
括号意味着你想捕捉范围内匹配的字符串,即数量。 ->
符号是一个变量名称:这是一个常用于存储完整匹配的约定(例如“Wbay7”),当我们不关心它时。变量n
设置为捕获的数字。如果regexp
未返回1,则不可信任n
中的值:该变量将保留之前的值。变量maxN
设置为$n
和$maxN
中最大的一个。
但是你也可能会发现一个数组变量有用。通过数组,您可以指定个人成员Wbay(1)
,Wbay(2)
,Wbay(99)
等(它们不必是连续的或按顺序的)。如果你想知道你有多少会员,array size Wbay
会告诉你。
文档: array, expr, if, lindex, max (function), regexp, set, string, Syntax of Tcl regular expressions
的Tcl的语法字符串匹配:
*
匹配的零序列或多个字符
?
单个字符
[chars]
在由字符(给定组中的单个字符匹配匹配^确实不否定;一系列可以作为A-Z)
\x
X匹配的字符,即使该字符是特殊(的*?[]\
之一)
太好了!还有一个问题 如果我想为一个更一般的案例来处理所有的案例Wbay1,Wbay2,Wbay3 ... Wbayn 然后,而不是Wbay [12],我应该怎么做? 我希望代码能够智能地识别Waby的存在并捕获它们? 非常感谢! – Reza