复杂的正则表达式 - 这可能吗?

时间:2011-10-28 12:27:41

标签: java regex

对于以下字符串,我试图在字符串包含主线时提取“主线”,如果不包含主线则在末尾提取数字。我正在使用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

这是否可以使用正则表达式,如果是这样,任何人都知道如何做到这一点? : - )

5 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

如果字符串始终以Solaris10NB开头,请尝试使用以下表达式:Solaris10NB[\w\-]+(\d.*)

然后使用Matcher#group(1)提取第一组。

答案 2 :(得分:0)

试试这个正则表达式

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

NB假设评论是字符串的一部分

否则

[0-9.]+x)$

答案 3 :(得分:0)

查看此表达式是否有效

(\d\.)+\d?X$

答案 4 :(得分:0)

试试这个正则表达式:

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

如果在字符串结尾处找到mainline,则$1变量将包含值mainline。如果找到版本号,则会填充$2变量,$1将为空/空。