2011-10-28 13 views
0

以下の文字列については、文字列にメインラインが含まれている場合は 'mainline'を、メインラインが含まれていない場合は末尾に数字を抽出しようとしています。私はJavaを使用しています。複雑な正規表現 - これは可能ですか?

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

がこれを可能に使用する正規表現され、もしそうなら、誰もが行う方法を知っている:私は最後の数字だけ

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 

メインラインの例たく、以下の文字列の

例えば、それ? :-)

答えて

2
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"); 
+0

ありがとう、これはトリック、私はちょうどメインラインをチェックするために文を使用しています、そしてこれはメインラインを含んでいない文字列のelse節で - 多くのありがとう。 – Rory

0

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

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

+0

OPの最初の段落をもう一度見てください。 –

0

コメントを想定すると、NB

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

この正規表現を試してみては文字列

の一部であり、それ以外の場合は

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

最初の式は "... x"と一致し、2番目の式は "... x"と一致します。それは質問に必要なもののように見えません。 – Alexey

0

この式は

(\d\.)+\d?X$ 
を動作するかどうかを参照してください。上記の入力の場合
0

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

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

それは、文字列の末尾にmainlineを見つけた場合、その後$1変数に値mainlineが含まれます。バージョン番号が見つかると、$2変数に値が設定され、$1は空/空になります。

関連する問題