我想你要的是:
[len(s) for s in re.findall(r'{}+'.format(CHAR), input)]
当然,如果CHAR是一个特殊值,这将不起作用,例如\. 如果这是一个问题:
[len(s) for s in re.findall(r'{}+'.format(re.escape(CHAR)), input)]
如果要匹配两个或多个而不是一个或多个,则其语法为{2,}. 正如文档所说:
{m,n}使生成的 RE 匹配前一个 RE 的 m 到 n 个重复,尝试匹配尽可能多的重复。例如,a{3,5}将匹配 3 到 5 个'a'字符。省略m指定下限为零,省略n指定无限上限。例如,a{4,}b将匹配aaaab或一千个'a'字符后跟一个b,但不是aaab……</p>
当我们使用{}字符串格式化时,这有点难看,所以让我们切换到%-formatting:
[len(s) for s in re.findall(r'%s{2,}' % (re.escape(CHAR),), input)]
…或者只是简单的串联:
[len(s) for s in re.findall(re.escape(CHAR) + r'{2,}', input)]