2016-02-19 76 views
-2

我想append一个字符的字符串每三个字符 例如,如果我的字符串是NYCLHRNYC后的结果将是NYC-LHR-NYC 字符串的长度总是3的Python:字符串操作

多我写了下面的代码:

x = raw_input("Enter the route") 
print "Route: %s" %x 
length = len(x) 
print length 
if length == 6: 
    newx= x[0:3] +"-"+ x[3:6] 
elif length == 9: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] 
elif length == 12: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12] 
elif length == 15: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12]+"-"+ x[12:15] 
elif length == 18: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12]+"-"+ x[12:15]+"-"+ x[15:18] 
elif length == 21: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12]+"-"+ x[12:15]+"-"+ x[15:18]+"-"+ x[18:21] 
print "After formattinng: %s" %newx 

现在,这是做的非常机械的方式。在大多数情况下,我不知道字符串的最大长度。 有没有更好的方法来做到这一点for loop或别的什么?

在此先感谢您的答案。

+1

这么写的,用于格式化您的字符串(给方法的长度参数)的方法,并用位数学,你可以得到它的工作;) –

回答

13

这很简单:

newx = "-".join(x[i:i+3] for i in range(0, len(x), 3)) 
+0

哇其惊人的有这件事只需要一行代码。非常感谢。我以为我必须用for循环来做到这一点。 –

+1

也可以使用re:'re.sub('。{3}','\ g <0> - ',x)'这样做可能会导致在最后一组之后添加' - '字符,如果字符的总数是3的倍数... – jfsturtz

+0

@jfsturtz:这绝对是一个不希望的效果,因为OP提到字符串的长度总是3的倍数,但总是可以使用字符串.strip( “ - ”)'。 – zondo