所以这应该很容易,但我在某种程度上错过了关于SO或Python文档的答案。 我正在使用此代码:
myregex.findall(source)
这会将myregex的所有匹配项生成为一个列表。 现在,问题是源很长,我只需要前6次出现匹配myregex的子串。我想如果匹配过程在找到前n次发生后停止会更快。 我该怎么做:
myregex.findall(source, n)
答案 0 :(得分:6)
使用re.finditer
:
import itertools
for m in itertools.islice(re.finditer(pat, text), 6):
...
re.finditer
是一个按需生成match
个对象的生成器。您可以从m.group(0)
获得完整匹配,也可以从m.group(1)
开始获得完整匹配。
答案 1 :(得分:1)
由于您需要效果,请使用regex.finditer
def my_find(regex, s, n):
const = regex.finditer(s)
return [const.next().groups() for i in range(n)]
或更安全的版本:
def my_find(regex, s, n):
const = regex.finditer(s)
ret_val = []
for i in range(n):
try:
ret_val.append(const.next().groups())
except StopIteration:
return ret_val
return ret_val