繁体   English   中英

python问题中的字符串切片

[英]String slicing in python issue

我正在编写一个简单的程序来解码以下给出的二进制字符串:

bin_str = "101100001101100001"

首先,如果第一个字符由“ 1”表示,则接下来的八个字符将被解码为“ 01100001”,其中我将“ 01100001”传递给函数以获取其ascii表示形式。

def convert_ascii(binary):
    c = chr(int(binary, 2))
    return c

将“ 01100001”传递给上述函数将产生“ a”,这是解码的第一个字符。 继续,索引9处的下一个字符也由“ 1”表示,因此接下来的八个字符也将被解码为“ 01100001”。 传递到上面也会产生“ a”。

lst = []
fixed_length = 8
i = 0
while i < len(bin_str):
    if binary[i] == "1":
        fl_bin = binary[i+1:fixed_length+1] #issue here
        ascii_rep = convert_ascii(fl_bin)
        lst.append(ascii_rep)
        i+=fixed_length+1

我面临的问题是从原始bin_str中切出长度为8的特定字符串“ 01100001”,在此我尝试通过[i + 1:fixed_length + 1]进行切片,但是在第二阶段,fl_bin变成了“”下一个“ 01100001”。

希望对此有所帮助。

执行此操作的一种好方法是创建一个正则表达式,该正则表达式匹配1后跟正好是8个10字符,然后使用re.findall()查找字符串中此模式的所有不重叠的出现。 通过使用非捕获组,您甚至可以使结果中不包含开头的1位数字(尽管如果您不这样做,则将其切掉很简单)。

import re
reg_ex = "(?:1)([01]{8})"

bin_str = "101100001101100001"
ascii_rep = "".join(chr(int(byte, 2)) for byte in re.findall(reg_ex, bin_str))

另外,这可以使源字符串中的组分开(用空格或单词或任何不是1后跟8 0 s或1 s的字符),以便于阅读。

使用iternext通过仿佛周期next产生1然后创建下一个8个项目的子表,它添加到主列表和重复,直到发电机被耗尽。

bin_str = "101100001101100001" 
a = iter(bin_str) 
lst = []

while True:
    try:
        b = next(a)
        z = []
        if b == '1':
            for i in range(8):
                z.append(next(a))
            lst.append(''.join(z))
    except StopIteration:
        break

print(lst)
# ['01100001', '01100001']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM