0
我在foreach循環中得到了三個不同的條目「10576.53012.46344.35174」,「10」和「Doc-15」。在這3個條目中,我想要10576.53012.46344.35174。我如何驗證當前字符串包含多個。和數字。我如何驗證輸入字符串包含數字(0-9)和多個(特殊字符)在TCL
進出口新的TCL,需要建議
我在foreach循環中得到了三個不同的條目「10576.53012.46344.35174」,「10」和「Doc-15」。在這3個條目中,我想要10576.53012.46344.35174。我如何驗證當前字符串包含多個。和數字。我如何驗證輸入字符串包含數字(0-9)和多個(特殊字符)在TCL
進出口新的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"
}
的另一種方法是split
由.
字符串,並檢查各組是你想要什麼:
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
酌情提供幫助)。編寫非RE驗證器可能具有挑戰性,並且往往需要大量代碼。
感謝Donal在正則表達式中使用正則表達式「(?:\。\ d {5}){3} $」表示3次。在一組5位數後出現? –
是的。這意味着你想找到三個「一個分隔符('.')後跟5個數字」。當然,還有另外一組5位數字。我使用'(?:...)'作爲非捕獲組,這使得RE匹配更快。 –