使用java regex从字符串中提取版本

时间:2017-06-16 15:10:10

标签: java regex

我似乎无法找出正确的正则表达式(java风格)来为这些字符串提取版本部分

EXPECTATION
spring-aop-4.2.5.RELEASE.jar  -> 4.2.5
rumi-1.js                     -> 1
BouncyCastle-Net-12-1.dll     -> 12-1

使用以下java正则表达式,我会在行尾

处获得句点
\\b\\d[\\d|\\.|\\-]*\\b

任何人都可以提出更好的正则表达式吗?

 FAULTY_RESULT
 spring-aop-4.2.5.RELEASE.jar  -> 4.2.5.
 rumi-1.js                     -> 1.
 BouncyCastle-Net-12-1.dll     -> 12-1.

3 个答案:

答案 0 :(得分:2)

数字,后跟零个或多个点/破折号和数字,前面没有单词字符:

(?<!\w)\d+([.-]\d+)*

在java中,它可以在一行中完成:

String version = packageName.replaceAll(".*?((?<!\\w)\\d+([.-]\\d+)*).*", "$1");

这里,当正则表达式匹配整个输入时,捕获目标术语,替换术语返回目标(通过捕获的组)。

答案 1 :(得分:0)

可能你可以更好地表达这个表达,但这是我的第一次尝试。注意。你需要看看这个表达。

(\d+(\.?|-?|\d)+\d|\d)

问候。

答案 2 :(得分:-1)

尝试这样的事情:

\b\d[\d|.|\-]*\d\b

反斜杠加倍仅进入String常数:

"\\b\\d[\\d|.|\\-]+*\\d\\b"

然而,这与单个数字版本不匹配......