我需要在一个二进制字符串输入中重复地将所有00000
替换为0
。
虽然我在某种程度上能够做到,但我不知道当有多个连续的00000时的逻辑,如**,例如**:
- 25个0应替换为1个0
- 50个0应替换为两个0
- 125个0应替换为1个0
目前我有以下代码:
new_list = []
c = 0
l = list(s.split("00000"))
print(l)
for i in l:
if i == "00000":
for x in range(l.index(i),l.index(i-3)):
if l[x] != 0:
break
for y in range(0,5):
del l[i-y]
new_list.append(i)
new_list.append("0")
r_list = new_list[0:-1]
r_list= ''.join(map(str, r_list))
print(r_list)
但是这对25个0不起作用。另外,正则表达式的替代方案是什么?
3条答案
按热度按时间bkkx9g8r1#
为了得到这些结果,你需要 * 重复 * 将五个连续的零替换为一个零,直到不再出现五个连续的零。
yizd12fk2#
正如我在评论中所说的,我最好的猜测是,你试图重复应用5个
0
被1替换的规则,这样,例如,25个0
被简化为00000
,而00000
又被简化为0
。假设这是正确的:这不是最有效的方法,但有一种方法可以做到:
或者,这里有一个方法可以在数组中一次应用该更改:
6rqinv9w3#
PyPI regex支援recursion。类似以下的程式码可以执行:
请参见www.example.com上的Python演示tio.run或regex demo at regex101
在
(?0)
或(?R)
处,模式被粘贴(递归)。