2017-12-25 26 views
0

は、私はこれらのファイル名でファイルを持っている:ZATR後の4桁が雑誌の発行番号がある正規表現は一致する可能性がありますか?

ZATR0008_2018.pdf 
ZATR0018_2018.pdf 
ZATR0218_2018.pdf 

。この正規表現で

([1-9][0-9]*)(?=_\d) 

私は818または218を抽出することができますが、私は結果が0818218する必要がありますので、最低2桁と最大3桁の数字を維持したいと思います。

どのようにすることができますか?あなたが起動する番号の一部を望んでいたとして、それが見えた独自の正規表現から:

+0

あなたのアプリはどんな種類の正規表現を予期していますか? – ysth

答えて

2

あなたは

0*(\d{2,3})_\d 

を使用し、グループ1つの値をつかむことがあります。 the regex demoを参照してください。

詳細

  • 0* - ゼロ以上0文字 (\d{2,3})
  • - グループ1:二、三桁の数字
  • _\dから_は数字が続きます。ここで

あなたは全体の試合に必要な値をつかむPCREのバリエーションです:

0*\K\d{2,3}(?=_\d) 

はここanother regex demo

を参照してください、\Kは、正規表現エンジンは、これまでにマッチしたテキスト(ゼロを省略します)、2〜3桁に一致し、その後に_と数字が続きます。

+1

こんにちはWiktorもあなたのソリューションが動作します。 $ 2 $ 3を使って、私は次のように変更しました:(\ D {2})(\ D {2})トークンを組み立てる。 Wiktorに感謝します。 – user1297545

0
([1-9]\d{2,3})(?=_\d) 

{X、Y}はXからY回にこの場合は、前のパターン、\ dは

編集にマッチしますゼロではない。あなたの例では、大手の0を含めるので、多分あなたが本当に望んでいた:唯一の2桁の数字がある場合を除き、アンダースコアの前にあなたの最後の3桁の数字を与える

(\d{2,3})(?=_\d) 

0

私はあなたを提案する:

^ZATR0*(\d{2,3})_\d+\.pdf$ 

デモコードhere。結果:

マッチ1全試合0-17 ZATR0008_2018.pdfグループ1. 6-8 08

マッチ2試合のフル18-35 ZATR0018_2018.pdfグループ1。24-26 18

マッチ全3試合36から53 ZATR0218_2018.pdfグループ1. 41-44 218

+0

Tommasoが正しい方向に向いてくれてありがとう。しかし、もし数字(グループなし)の例08,18 218とマッチしたいのですか? – user1297545

+0

数字だけが一致しています。グループを参照してください... –

+0

私の問題(08,18,218のような例)を抽出するために、正規表現をアプリケーションに渡す必要があります。私はsaerchのようなフィールドを持っていないし、私はグループのような$ 1、$ 2を定義することができます置き換えます。だから私は問題を特定し、一致させる必要がある。 – user1297545

1
(?:[1-9][0-9]?)?[0-9]{2}(?=_[0-9]) 

または多分:

(?:[1-9][0-9]+|[0-9]{2})(?=_[0-9]) 

https://www.freeformatter.com/regex-tester.html、使用することを主張しますあなたが別の答えで言及しているXRegExpライブラリは、必要に応じて私の最初の提案で(?:)?に逆戻りしているようではありません。私が前にencoueredした正規表現エンジンからの家賃は18218の後ろにマッチする方が好きです。しかし、それは私の2番目の提案とうまくいく。

+0

ビンゴ!できます。どうもありがとう! – user1297545

+0

@ user1297545これが動作する場合は、この回答の横にある灰色のチェックマークをチェックして受け入れてください。 – ysth

+0

私は正規表現の初心者ですから、私はあなたのソリューションを "グループ"にする方法を知りたいと思います。私は検索と置換を意味regexはそのようなことをすることが可能です:文字列が例えばZATR0008_2018.pdfで、正規表現が(\ D {4})(\ d {4})(_ \ d {4})( .pdf)ZATR_2018.pdfの結果として$ 1 $ 3 $ 4のようなトークンを再アセンブルすることができますが、私はあなたの(?:[1-9] [0-9] + | [0-9] {2}) (?= _ [0-9])置換するために使用できる単一のグループ? – user1297545

関連する問題