如何剪切带有重复的字符串?

时间:2015-04-26 18:53:18

标签: python string

我有这个字符串:

StringBuilder

我想用这部分代码将它剪成长度为22的部分:

'fhsdkfhskdslshsdkhlghs
bksjvsfgsdnfsfbjfgzfga
avzaeafeaeaddacbytt!tw
fhsdkfhskdslshsdkhlghs
bksjvsfgsdnfsfbjfgzfga
avzaeafeaeaddacbytt!tw'

然后我会得到这个:

from textwrap import wrap

w_str= (wrap(str,22))

下一步应该取最后四个字母和第一个字符串,并在下一个字母的开头处将其过去,依此类推。 就像这样带有Id:

fhsdkfhskdslshsdkhlghs

bksjvsfgsdnfsfbjfgzfga

avzaeafeaeaddacbytt!tw

2 个答案:

答案 0 :(得分:1)

一旦你有了这样的字符串:

_str = """fhsdkfhskdslshsdkhlghs
bksjvsfgsdnfsfbjfgzfga
avzaeafeaeaddacbytt!tw"""

您可以执行以下操作:

>>> _str = _str.split()
>>> new = [_str[i-1][len(_str[i-1])-4:len(_str[i-1])]+_str[i] if i > 0 else _str[i] for i in range(len(_str))]
>>> print '\n'.join(new)
fhsdkfhskdslshsdkhlghs
lghsbksjvsfgsdnfsfbjfgzfga
zfgaavzaeafeaeaddacbytt!tw
>>> 

修改

zip两个列表在列表理解中列在一起,如下:

'\n'.join(['\n'.join(item) for item in zip(['e_'+str(num) for num in range(1, len(new)+1)], new)])
>>> _str = _str.split()
>>> new = [_str[i-1][len(_str[i-1])-4:len(_str[i-1])]+_str[i] if i > 0 else _str[i] for i in range(len(_str))]
>>> print '\n'.join(['\n'.join(item) for item in zip(['e_'+str(num) for num in range(1, len(new)+1)], new)])
e_1
fhsdkfhskdslshsdkhlghs
e_2
lghsbksjvsfgsdnfsfbjfgzfga
e_3
zfgaavzaeafeaeaddacbytt!tw
>>> 

答案 1 :(得分:0)

在某些方面,字符串就像Python中的列表一样you can reference their contents by index, and splice them and so on

因此,您可以使用字符串中字符的索引来提取每个包装字符串的最后4个字符:

input_string  = 'fhsdkfhskdslshsdkhlghsbksjvsfgsdnfsfbjfgzfgaavzaeafeaeaddacbytt!tw'
split_strings = wrap(input_string, 22)

add_string = ''  # nothing there at first, but will be updated as we process each wrapped string
for output_string in split_strings:
    print add_string + output_string 
    add_string = output_string[-4:]  # "[-4:]" means: "from the fourth last char of the string, to the end"

输出:

fhsdkfhskdslshsdkhlghs
lghsbksjvsfgsdnfsfbjfgzfga
zfgaavzaeafeaeaddacbytt!tw