( および ) 内のすべての数値をデータ内で個別に検索してキャプチャしようとしていますが、残りの数値は無視されます。
私のデータは次のようになります
21 [42] (12) 19 25 [44] (25 26 27) 17 (14 3) 8 1 6 (19)
だから私は、、、、、、およびの一致12
を見つけたい25
26
27
14
3
19
私はやってみましたが、\((\d+)\)*
これは私12
に25
、、、14
19
どんな助けでも大歓迎です。
( および ) 内のすべての数値をデータ内で個別に検索してキャプチャしようとしていますが、残りの数値は無視されます。
私のデータは次のようになります
21 [42] (12) 19 25 [44] (25 26 27) 17 (14 3) 8 1 6 (19)
だから私は、、、、、、およびの一致12
を見つけたい25
26
27
14
3
19
私はやってみましたが、\((\d+)\)*
これは私12
に25
、、、14
19
どんな助けでも大歓迎です。
肯定的な先読みと否定的な先読みを組み合わせて、目的の結果を得ることができます。
(\d+)(?=(?:.(?!\())*\))
正規表現:
( group and capture to \1:
\d+ digits (0-9) (1 or more times)
) end of \1
(?= look ahead to see if there is:
(?: group, but do not capture (0 or more times)
. any character except \n
(?! look ahead to see if there is not:
\( '('
) end of look-ahead
)* end of grouping
\) ')'
) end of look-ahead
デモを見る
そこに巣は見当たりません。ネストは、次のようなことを意味します。
12 (34 (56) 78) 90
そのようなデータが実際にある場合、特にネストの深さが分からない場合は、正規表現を使用しないことをお勧めします。しかし、あなたの問題は非常に単純に見えます。必要なのはこれだけです。
\d+(?=[^()]*\))
他の回答と同様に、先読みは、こことそこの間に開始ブラケットがなく、前方に終了ブラケットがあることを主張します。主に効率のために、閉じ括弧も除外しました。そうしないと)
、最初にズームインする傾向があり、バックトラックする必要があるだけです。