所以这应该很容易,但我不知何故错过了 SO 或 Python 文档的答案。我正在使用这段代码:
myregex.findall(source)
这会生成 myregex 的所有匹配项作为列表。现在,问题是源很长,我只需要前 6 次匹配 myregex 的子字符串。我想如果匹配过程在找到前 n 次出现后可以停止,它会快得多。我该怎么做:
myregex.findall(source, n)
?
使用re.finditer
:
import itertools
for m in itertools.islice(re.finditer(pat, text), 6):
...
re.finditer
match
是一个按需生成对象的生成器。您可以从 获取完整匹配,或者从和向上获取m.group(0)
单个模式匹配。m.group(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