如何获取模式的复制数并使用它

wil*_*ibi 0 python regex

例如,有一个类似的字符串aaaaaab,其中a重复n次(在这种情况下,n = 6).我怎么能得到数字n?

然后,如果我想使用n将其替换 a为n/2次aaab,或n-2次aaaab.怎么办呢?

eum*_*iro 7

s = 'aaaaabbcdddddddd'
[(m.group(1), len(m.group(2))+1) for m in re.finditer(r'(\w)(\1*)', s)]
Run Code Online (Sandbox Code Playgroud)

回报

[('a', 5), ('b', 2), ('c', 1), ('d', 8)]
Run Code Online (Sandbox Code Playgroud)

要使用它来替换字符组:

re.sub(r'(\w)(\1*)', lambda m: m.group(1)*f(len(m.group(2))+1), s)
Run Code Online (Sandbox Code Playgroud)

有:

f = lambda x: x - 2 # returns 'aaadddddd'
f = lambda x: x / 2 # returns 'aabdddd'
f = lambda x: x + 1 # returns 'aaaaaabbbccddddddddd'
Run Code Online (Sandbox Code Playgroud)