が先行または後続しない桁の具体的な数は、私は、文字列があります。マッチ桁
string = u'11a2ee22b333c44d5e66e777e8888'
を私はn <= k <= m
桁の全てk
連続したチャンクを見つけたいです。唯一の正規表現を使用して
: は例n=2
とm=3
のために言う(?:\D|^)(\d{2,3})(?:\D|$)
re.findall(u'(?:\D|^)(\d{2,3})(?:\D|$)',u'11a2ee22b333c44d5e66e777e8888')
を使用して、この出力を提供します:
['11', '333', '66']
所望の出力:
['11', '22', '333', '44', '66', '777']
代替ソリューションがあります:
filter(lambda x: re.match('^\d{2,3}$', x), re.split(u'\D',r'11a2ee22b333c44d5e66e777e8888'))
希望の出力が得られますが、最初のアプローチで何が問題なのかを知りたいのですか?
一致するとre.findall
が順番に前の部分をスキップしているようですので、何ができますか?
はhttps://regex101.com/であなたのパターンを試してみてください、または多くのオンラインのPythonの他には、正規表現テスターを風味。パターンの仕組みを示す説明やグラフィックを示すものもあります。 – wwii
あなたのキャプチャしていない*グループ*はテキストを消費します。 '' re.findall'''は、重複しないマッチだけを返します。あなたがテキストを消費すると、オーバーラップを作成することになります。試してください*アサーションを見て*、*ネガティブな先読みアサーション*、正と負の*見た目のアサーション*。 – wwii