2017-10-23 13 views
2

文字列から固定長のグループを抽出したいが、先頭のゼロを無視する。正規表現グループ内の先頭文字を除外する

例:

String: 1a2300245filler060403105543a 
      ^^^^^  ^^^^^^ 

現在の正規表現:これは私を与える.{4}(?<part_x>[\d]{5})filler(?<part_y>[\d]{6})

:part_xとpart_yの初期長さ(それぞれ5と6)に固定されていることを

part_x = 00245 

part_y = 060403 

Is there some way to remove the leading zeroes from the grouping to get this? 

part_x = 245 

part_y = 60403 

注意。私はちょうど正規表現の先頭にゼロをトリムしたい。

+0

正規表現の内側にこれを行うことは困難と思われます。..後でこれを行うことができます。 –

答えて

2

それを選択、このようなオーバーラップする部分式にマッチしてキャプチャするために少し厄介ですが、ここであなたは、この特定の場合、そのような場合に使用することができますトリックだ:

.{4}(?=\d{5}(.++))0{0,4}(?<part_x>\d+(?=\1))filler(?=\d{6}(.*+))0{0,5}(?<part_y>\d+(?=\3)) 

ここにトリックは(?=\d{5}(.++))のぞき見控えのです現在のマッチングポイントは5桁が存在することを確認するために使用しますが、(.++)はさらに進み、後のテストのために残りの件名文字列を取得します。その後、潜在的な先頭の '0はキャプチャ外で消費され、(?<part_x>\d+(?=\1))の残りの数字と一致するようになります。先にキャプチャされた\1の位置で数字の一致が停止することを確認します。

part_xとpart_yは、必要に応じて入力します。

あなたが理解し、概念的に簡単です何かをしたい場合は、あなたが、たとえば、5桁の数字と一致し、先行ゼロなしでキャプチャするために、以下を使用することができます。

(?|0([1-9]\d{3})|00([1-9]\d\d)|000([1-9]\d)|0000(\d)) 
関連する問題