2017-06-22 85 views

回答

0

這是哪門子的任務就是一個很好的適用於正則表達式。

字符串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驗證器可能具有挑戰性,並且往往需要大量代碼。

+0

感謝Donal在正則表達式中使用正則表達式「(?:\。\ d {5}){3} $」表示3次。在一組5位數後出現? –

+0

是的。這意味着你想找到三個「一個分隔符('.')後跟5個數字」。當然,還有另外一組5位數字。我使用'(?:...)'作爲非捕獲組,這使得RE匹配更快。 –