让我们说一个字符串=“ AABBAAAAABBBBAAAAAABBBBAA” 我想返回按字符串的奇数长度分割的字符串(即,当A = 5或A = 3时),
我想要返回的是1)AABBAAAAA 2)BBBBAAA 3)BBBBAA,
我该怎么做?
我尝试使用正则表达式[A] + [B] +处理稍有不同的情况
答案 0 :(得分:0)
一个选项可能是使用re.finditer
以以下模式进行正则表达式迭代:
.*?(?:AAA(?:AA)?|$)
此模式将不会贪婪地消耗,直到达到3 A,5 A或字符串末尾为止。然后,我们可以在进行迭代时打印出每个完全匹配项。
input = 'AABBAAAAABBBBAAABBBBAA'
pattern = '.*?(?:AAA(?:AA)?|$)'
for match in re.finditer(pattern, input):
print match.group()
此打印:
AABBAAAAA
BBBBAAA
BBBBAA
答案 1 :(得分:0)
您可以使用itertools.groupby
:
s = 'BBAAAAABBBBAAABBBBAA'
from itertools import groupby
out = ['']
for v, g in groupby(s):
l = [*g]
out[-1] += ''.join(l)
if v == 'A' and len(l) in (3, 5):
out.append('')
print(out)
打印:
['BBAAAAA', 'BBBBAAA', 'BBBBAA']