1. ホーム
  2. python

[解決済み] Python regex find all overlapping matches?

2022-07-22 02:18:21

質問

Python 2.6でreを使って、大きな数字列の中の10桁の数字列を全て見つけようとしています。

私は重複しないマッチを簡単につかむことができますが、私は数列のすべてのマッチが欲しいです。 例えば、次のようなものです。

in "123456789123456789"

以下のようなリストが表示されるはずです。

[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]

私は "lookahead" への参照を見つけましたが、私が見た例はより大きなグループではなく数字のペアを示しているだけで、2 桁を超えて変換することができませんでした。

どのように解決するのですか?

ルックヘッド内のキャプチャグループを使用します。lookahead は興味のあるテキストをキャプチャしますが、実際のマッチは技術的には lookahead の前のゼロ幅の部分文字列なので、マッチは技術的には重なりません。

import re 
s = "123456789123456789"
matches = re.finditer(r'(?=(\d{10}))',s)
results = [int(match.group(1)) for match in matches]
# results: 
# [1234567891,
#  2345678912,
#  3456789123,
#  4567891234,
#  5678912345,
#  6789123456,
#  7891234567,
#  8912345678,
#  9123456789]