对字符串进行分区并将其分割为每n个字符

时间:2018-04-10 14:45:09

标签: python python-3.x

所以我有data="6060526060....cont"。我想将这个字符串分成每4个字符。但如果出现52号码,我想为2 chars吐出这个号码。即['6060', '52', '6060']

我目前有:

r = [data[i:i+4] for i in range(0, len(data),4)]

这将它放入每4个字符中,只是难以将“52”变成2个高级字符,谢谢

4 个答案:

答案 0 :(得分:5)

这是我的解决方案

void Medicine::createFile()
{


    std::ofstream medicine_file(file_name);
    if (!medicine_file.is_open())
        std::cout << "file is not opening\n";
    medicine_file.close();
}

输出

data="606052606080801010521010"

i=0
L = []
while i<len(data):
    if data[i:i+2] == '52':
        L.append(data[i:i+2])
        i+=2
    else:
        L.append(data[i:i+4])
        i+=4
print(L)

答案 1 :(得分:4)

您可能会考虑拆分正则表达式:

import re
digits = '6060526060521233'
r = [s for s in re.split('(52|\d{4})', digits) if s]

每次'52'或一组四位数时,都会创建一个新的分割。输出:

['6060', '52', '6060', '52', '1233']

demo

答案 2 :(得分:2)

我认为比以前的答案更像是Python主义者:

def iter_data(data, pos=0):
    while pos < len(data):
        if data[pos:pos+2] == "52":
            yield "52"
            pos += 2
        else:
            yield data[pos:pos+4]
            pos += 4

print(list(iter_data(data)))

输出:

['6060', 52, '6060', '8080', '1010', 52, '1010']

答案 3 :(得分:0)

以下是在str.partition循环中使用while的另一种方式:

将字符串转换为元组,并在最后一个元素上重复调用分区。将其余部分附加到原始元组:

data="60605260605211110000"
new_data = (data,)
while '52' in new_data[-1]:
    new_data = new_data[:-1] + new_data[-1].partition('52')
print(new_data)
#('6060', '52', '6060', '52', '11110000')

如果您的数据保证每4个字符由'52'分隔,那么您在这里完成(只需将输出转换为列表)。如果没有(正如我在我的例子中所示),你需要经历这个输出并分割超过4个char字符串:

parts = []
for p in new_data:
    if p == '52' or len(p) <=4:
        parts.append(p)
    else:
        parts.extend([p[i:i+4] for i in range(len(p)//4)])
print(parts)
#['6060', '52', '6060', '52', '1111', '1110']