129

Python 2.6でreを使用して、より大きな一連の数字の中から10桁の一連の数字をすべて見つけようとしています。

重複する一致を簡単に取得することはできませんが、番号シリーズのすべての一致が必要です。例えば。

「123456789123456789」で

次のリストを取得する必要があります。

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

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

4

4 に答える 4

220

先読み内でキャプチャ グループを使用します。先読みは興味のあるテキストをキャプチャしますが、実際の一致は技術的に先読みの前のゼロ幅の部分文字列であるため、一致は技術的に重複していません。

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]
于 2011-04-11T04:58:06.667 に答える
90

重複一致をサポートするサードパーティregexモジュール( ではない)を使用することもできます。re

>>> import regex as re
>>> s = "123456789123456789"
>>> matches = re.findall(r'\d{10}', s, overlapped=True)
>>> for match in matches: print(match)  # print match
...
1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789
于 2013-09-23T19:06:51.290 に答える
19

私は正規表現が好きですが、ここでは必要ありません。

単に

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
于 2011-07-27T13:34:12.350 に答える