我想你要的是:
[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)]