私はre in Python 2.6。
重複する一致を簡単に取得することはできませんが、数値シリーズのすべての一致が必要です。例えば。
「123456789123456789」で
次のリストを取得する必要があります。
[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]
「先読み」への参照を見つけましたが、私が見た例では、より大きなグループではなく数字のペアのみを示し、2桁を超えて変換することはできませんでした。
先読み内でキャプチャグループを使用します。先読みは興味のあるテキストをキャプチャしますが、実際の一致は技術的には先読みの前のゼロ幅の部分文字列なので、技術的には重複しません。
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]
サードパーティregex
モジュール (re
ではなく)を使用して、重複する一致をサポートすることもできます。
>>> import regex as re
>>> s = "123456789123456789"
>>> matches = re.findall(r'\d{10}', s, overlapped=True)
>>> for match in matches: print match
...
1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789
私は正規表現が好きですが、ここでは必要ありません。
単に
s = "123456789123456789"
n = 10
li = [ s[i:i+n] for i in xrange(len(s)-n+1) ]
print '\n'.join(li)
結果
1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789