2

リスト内の数字の名前付きキャプチャを作成する必要があります

ソースデータの例

This is a comment on line 1
Here is another Comment Line 2
Log ID 1234,5555,2342

using:(?<id>(\d+)*)の結果をピックアップします

1
2
1234
5555
2342

しかし、これはピックアップし12エラーになります。Log ID Onlyの後のアイテムをピックアップするために必要です。

返される正規表現を探しています

1234
5555
2342

という名前のグループでid

4

3 に答える 3

2

言語が可変長の後読みをサポートしている場合は、次を使用できるはずです。

(?<=Log ID.*)(?<id>\d+)

また、元の正規表現にいくつかの変更を加えました。名前付きキャプチャ グループ内の追加のキャプチャ グループのポイント、またはネストされた繰り返し ((\d+)*は と同等ですが、実際にはそれが必要になるようにし(\d*)たいと思うからです\d+少なくとも 1 つの数字と一致する必要があります)。

可変長の後読みを使用できない場合 (ほとんどの言語)、おそらく 2 つの手順でこれを行う必要があります。最初に「ログ ID」を含む行を照合し、次にそれらの行の番号を探します。

于 2012-04-26T18:43:39.963 に答える
0

アサーションの背後にある否定的な見方はうまくいきますか?

(?<![Ll]ine )(?<id>\d+)
于 2012-04-26T19:05:07.620 に答える
0

これは、look(ahead|behind) なしでも実行できます。

"Log\s+ID\s+((?<id>\d+),?)+"

これにより、名前が付けられた別のグループの各番号が得られますid

  • Log\s+ID\s+: 探している ID と一致しますが、取得しないでください
  • (?<id>\d+),?: 数値をキャプチャし、その後にオプションのコンマを許可します (ただし、キャプチャはしません)
  • +: 少なくとも 1 回繰り返す

ただし、これにより問題が発生します。これは、同じ名前のグループがいくつかあるためです。これがどのように処理されるかは、言語によって異なります。

または、この正規表現を使用して、ログ ID の後の文字列全体を 1 つのグループにキャプチャすることもできます。

"Log\s*ID\s+(?<id>(?:\d+,?)+)"
于 2012-04-26T19:44:09.553 に答える