複雑な正規表現 - これは可能ですか?

次の文字列については、文字列にメインラインが含まれている場合は「メインライン」、メインラインが含まれていない場合は末尾の数字を抽出しようとしています。私はJavaを使用しています。

例えば、次の文字列については、最後に数字だけを入れたい

Solaris10NBngp-bwm1.1.X    //want 1.1.x
Solaris10NBbytel2.0.0.0x   //want 2.0.0.0x
Solaris10NBbwm1.2.X        //want 1.2.X
Solaris10NBoam_bwm1.4.0.X  //want 1.4.0X
Solaris10NBoam1.7.X        //want 1.7.X

メインラインの例:

Solaris10NBngp-bwm_mainline//want mainline
LinuxNBdaypass_mainline    //want mainline
LinuxNBngp_mainline        //want mainline

これは正規表現を使用して可能ですか?もしそうなら、誰かがそれを行う方法を知っていますか? :-)

0

5 答え

Solaris10NBngp-bwm1.1.X    //want 1.1.x 
Solaris10NBbytel2.0.0.0x   //want 2.0.0.0x 
Solaris10NBbwm1.2.X        //want 1.2.X 
Solaris10NBoam_bwm1.4.0.X  //want 1.4.0X 
Solaris10NBoam1.7.X        //want 1.7.X

上記の入力については、

expectedString = yourString.replaceAll("[^.]+(\\d+\\.)","$1");
2
追加された
ありがとう、これはトリック、私はちょうどmainlineをチェックするために文を使用して、これはメインラインを含んでいない文字列のelse句で - 多くのありがとう。
追加された 著者 Rory,

文字列が常に Solaris10NB で始まる場合は、次の式を試してください: Solaris10NB [\ w \ - ] +(\ d。*)

次に、 Matcher#group(1)を使用して最初のグループを抽出します。

0
追加された
OPの最初の段落をもう一度見てください。
追加された 著者 T.J. Crowder,

この正規表現を試してみてください

([0-9.]+x) +.*$

NBコメントが文字列の一部であると仮定

さもないと

[0-9.]+x)$
0
追加された
最初の式は "... x"と一致し、2番目の式は "... x"と一致します。それは質問に必要なもののように見えません。
追加された 著者 Alexey,

この正規表現を試してください:

/(mainline)$|(\d+\..*)\s*/

文字列の最後に mainline がある場合、 $ 1 変数には mainline という値が入ります。バージョン番号が見つかると $ 2 変数に値が設定され、 $ 1 は空/空になります。

0
追加された

この式が動作するかどうかを確認する

(\d\.)+\d?X$
0
追加された