3

-行にダッシュ ( ) が含まれているかどうかを確認し、その一部をキャプチャする方法を理解するのに苦労しています。

入力として使用できる文字列の例を次に示します。

abc,xyz,ijk-a,opq

abc,xyz,ijk,opq

ダッシュが存在する場合は、ダッシュの前の部分、つまりijk. ダッシュがない場合は、必要ですijk(2 番目の文字列に示されているように)。

次の正規表現式は、先読みアサーションで if 条件を使用してジョブを実行しますが、こちらRegex code hereに示すように、常に 1 つの空のグループを生成します。を返すキャプチャ グループを 1 つだけにしたいと思いijkます。

正規表現 if 条件は、if または else 条件のグループのみを返し、両方ではないと考えました。

.*,(?(?=.*?-.*?)(.*?)-.*?|(.*?)),

ありがとう

4

2 に答える 2

2

Perl スタイルの正規表現を使用:

/[^,]*,[^,]*,([^,-]*)/

2 つのケースを使用した例:

perl -lane 'print $1 if /[^,]*,[^,]*,([^,-]*)/;' input

出力

ijk
ijk
于 2013-01-04T22:52:21.873 に答える
0

あなたの文字列の後にハイフンが続くか'([^-]+)(-([^-]+))?' どうかは、最初のキャプチャグループになります。

于 2013-01-04T22:51:16.477 に答える