0

したがって、これは簡単なはずですが、SOまたはPythonのドキュメントで答えを見逃しています。私はこのコードを使用しています:

myregex.findall(source)

これにより、myregex のすべての一致がリストとして生成されます。問題は、ソースが長く、myregex に一致する部分文字列の最初の 6 回の出現だけが必要なことです。最初の 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 に答える