15桁の入力文字列を取得します001230123456789
。2つの数字があります。1つ目は00123
(最小1桁の非ゼロ桁、最大5桁)、2つ目は0123456789
(最小100000000
、最大10桁)です。キャプチャされた出力(これらの数値)には、先行ゼロが含まれていてはなりません。
(Pythonで)それを行うためのより簡単でおそらく唯一の適切な方法は、配列スライシングとlstrip()です。
input = "001230123456789"
output = [(input[:5].lstrip('0'), input[5:].lstrip('0'))]
# ('123', '123456789')
しかし、私には正規表現で同じことをするタスクがあります。
貪欲なオプションを試したかどうかにかかわらず、ゾムゼロが残っていることに固執しています。私はそれで終わりました:0{0,4}([1-9]\d{0,4})0?([1-9]\d{8,9})
そしてそれは私のテストの3/6に合格します:
000010111111111 - ('10', '111111111') (should be ('1', '111111111'))
116402151672479 - OK ('11640', '2151672479')
006421651672479 - ('6421', '651672479') (should be ('642', '1651672479'))
712120751672479 - OK ('71212', '751672479')
712121551672479 - OK ('71212', '1551672479')
006400351672479 - ('6400', '351672479') (should be ('640', '351672479'))
正規表現だけでそれを行う方法はありますか?
pastie.orgのテストと期待値を含む完全なサンプルソースコード。