我得到这样的字符串:
AABBBB$CCCDEEE$AABADEE
我想要这样的结果:
2A4B$3CD3E$2ABAD2E
为此,我在字符串数组上创建了一个 for 循环。 效果很好:
import re
string = "AABBBB$CCCDEEE$AABADEE"
out_string = string[:]
k = 1
c_old = ""
for c in string:
if c_old==c :
k += 1
else:
if k>1:
s= ""
for i in range(k):
s += c_old
chg = str(k) + c_old
out_string = re.sub(s, chg, out_string, 1)
k = 1
c_old = c
print(out_string)
但是对于很长的字符串,可能需要很长时间。
有没有一种方法可以在不迭代所有字符串的情况下完成我想要的操作,尤其是使用
re
模块?
不确定为什么你认为 re.sub() 适合这个。您只需要对源字符串进行相当简单的迭代。
类似这样的:
s = "AABBBB$CCCDEEE$AABADEE"
r = ""
c = 1
p = s[0]
for x in s[1:]:
if x == p:
c += 1
else:
if c == 1:
r += p
else:
r += f"{c}{p}"
c = 1
p = x
else:
r += p if c == 1 else f"{c}{p}"
print(r)
输出:
2A4B$3CD3E$2ABAD2E
回复评论。
也许是这样的:
string = "AABBBB$CCCDEEE$AABADEE"
out_string = ""
k = 1
c_old = ""
for c in string + " ":
if c_old==c :
k += 1
else:
if k>1:
out_string = out_string + str(k)
out_string = out_string + c_old
k = 1
c_old = c
print(out_string)