2016-05-30 24 views
3

は、ここで私はDDD001_1_20 _ 6TP2 _1 1つのキャプチャでグループをキャプチャし、アンダースコアを省略する必要が正規表現非キャプチャグループ

DDD001_1_2016_6TP2_1

、私の正規表現のテスト文字列です。私は以下の正規表現を試していますが、キャプチャしていないグループでさえ、私はまだ私が望むものをキャプチャできません。

^(.*?)_.*?_\d{2}(\d{2}(?:_).*)_.*$

私の研究から、それは正規表現を経由して、特定のキャプチャグループ内の文字を省略するのは不可能のように見える、それはステップ2などで行う必要があります。コード

ご協力いただければ幸いです。

+0

あなたはどの言語を使用していますか? – AKS

+0

は正規表現にオプションを適用する前にすべての下線*を取り除いていますか?または、複数のキャプチャグループを使用していますか? – Bohemian

答えて

2

簡潔には:できません。ゼロ幅アサーションのようなものが含まれていても、マッチは常に連続しています。

しかし、ほとんどの正規表現の一致は、ネストされたキャプチャグループ、後続の正規表現、または最後のアンダースコアをフィルタ処理する手動操作を使用できる、より広いプログラミング環境のコンテキストで実行されます。あなたがのために行くことができる

0

@ZephyrPellerinは正しいと言いました。

アンダースコアをフィルタリングすることはできませんが、異なるマッチンググループで必要なものをキャプチャして、使用している言語でどのような方法でもアクセスできます。

ここにはDEMOがあります。

私が使った正規表現は、(?<=_\d{2})(.+)(?=_(.+)_)です。ここで下線を最初の括弧内に捕捉される前部分後部

は二番目にあります。必要に応じてこれらを連結して1つの文字列を形成することができます。

これが役に立ちます。

関連する問題