0

所以这应该很容易,但我不知何故错过了 SO 或 Python 文档的答案。我正在使用这段代码:

myregex.findall(source)

这会生成 myregex 的所有匹配项作为列表。现在,问题是源很长,我只需要前 6 次匹配 myregex 的子字符串。我想如果匹配过程在找到前 n 次出现后可以停止,它会快得多。我该怎么做:

myregex.findall(source, n)

?

4

2 回答 2

8

使用re.finditer

import itertools
for m in itertools.islice(re.finditer(pat, text), 6):
    ...

re.finditermatch是一个按需生成对象的生成器。您可以从 获取完整匹配,或者从和向上获取m.group(0)单个模式匹配。m.group(1)

于 2013-04-03T10:12:46.423 回答
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
于 2013-04-03T10:12:09.870 回答