在字符串中每2个字符添加一个空格

时间:2013-12-05 00:46:07

标签: string tcl

我有这个形状“001122334455”的mac地址,我想变成“00 11 22 33 44 55”。我想有一种方法可以在一行中做到这一点,但我发现的唯一方法是以下可笑的可怕过程。有人能告诉我如何正确地做到这一点吗?

proc addSpaces { mac } {
    set mac [split $mac {}]                                  
    set i 0                                                  
    while { $i < 12 } {                                      
        if { [expr $i % 2] == 0 } {                          
            append macAddr " "                               
            append macAddr [lindex $mac $i]                  
            append macAddr [lindex $mac [expr $i + 1]]       
        }                                                    
        incr i                                               
    }
    return $macAddr                                                        
}

2 个答案:

答案 0 :(得分:3)

您可以使用tcl极其灵活的foreach

foreach {a b} [split $mac {}] {
    append macAddr " $a$b"
}

或者,如果您想摆脱前导空格,请构造一个列表而不是字符串:

foreach {a b} [split $mac {}] {
    lappend macAddr "$a$b"
}
join $macAddr " "

或者,您可以在返回

之前string trim使用您的字符串

答案 1 :(得分:3)

regsub也有效

set s 001122334455
set t [string trimright [regsub -all {..} $s {& }]]
puts ">$t<"
>00 11 22 33 44 55<

@Donal的建议很棒:

set t [join [regexp -all -inline .. $s]]  ;# "00 11 22 33 44 55"