如何验证输入字符串在TCL中包含数字(0-9)和多个(特殊字符)

如何验证输入字符串在TCL中包含数字(0-9)和多个(特殊字符),tcl,Tcl,我在foreach循环中得到了三个不同的条目“10576.53012.46344.35174”、“10”和“Doc-15”。在这3个条目中,我需要10576.53012.46344.35174。如何验证当前字符串是否包含多个。和数字 我是TCL新手,需要建议这类任务非常适合正则表达式 字符串10576.53012.46344.35174由如下RE匹配:^\d{5}(?:\.\d{5}){3}$,尽管您可能想要一些不那么严格的东西(例如,在每个组的位数方面有更大的灵活性-5-或在-3之后的组数)

我在foreach循环中得到了三个不同的条目“10576.53012.46344.35174”、“10”和“Doc-15”。在这3个条目中,我需要10576.53012.46344.35174。如何验证当前字符串是否包含多个。和数字


我是TCL新手,需要建议这类任务非常适合正则表达式

字符串
10576.53012.46344.35174
由如下RE匹配:
^\d{5}(?:\.\d{5}){3}$
,尽管您可能想要一些不那么严格的东西(例如,在每个组的位数方面有更大的灵活性-
5
-或在
-
3
之后的组数)

使用
regexp
命令测试字符串是否与正则表达式匹配:

if {[regexp {^\d{5}(?:\.\d{5}){3}$} $theVarWithTheString]} {
    puts "the regular expression matched $theVarWithTheString"
}
另一种方法是按
拆分
字符串,并检查每个组是否符合您的要求:

set goodBits 0
set badString 0
foreach group [split $theVarWithTheString "."] {
    if {![string is integer -strict $group]} {
        set badString 1
        break
    }
    incr goodBits
}
if {!$badString && $goodBits == 4} {
    puts "the string was OK"
}

我本人非常喜欢正则表达式方法(如果合适,偶尔会得到
string is
的帮助)。编写非重新验证器可能很有挑战性,而且往往需要大量代码。

感谢Donal,它使用正则表达式,“(?:\。\d{5}{3}$”在正则表达式中表示3次。在一组5位数字之后出现?是。这意味着您需要找到三个“分隔符(
),后跟5位数字”。当然,前面还有一组5位数。我正在使用
(?:…)
,因为这是一个非捕获组,这使得重新匹配更快。