确定split()的正则表达式

时间:2018-08-30 13:11:48

标签: groovy

我有一个字符串,代表一个版本:

 abc-5.18.0.0_10

我正在尝试确定正则表达式以提取此subString:

 abc-5.18.0

这在格式上是: 我们希望任何字符直到“-”。 我们还希望在“-”和第一个“。”之间,这是1到nn的主要版本。 我们还希望在第一个“之间”。第二个“。”这是次要版本0到nn。 我们还希望第二和第三个“。”之间的次要版本为0-nn。

xxx-nn.nn.nn

我正在尝试:

 .split("//|\\.")

我得到这个:

 abc-5.18

我在做什么错?应该是“ /// | \。”吗?

2 个答案:

答案 0 :(得分:1)

我认为您想要的正则表达式是东西,时期,东西,时期,直到第三时期的东西。

这使用组()捕获所需内容。由于.代表任何字符,而\.代表句点,因此看起来令人困惑。

s = 'abc-5.18.0.0_10'
re.match(r"(.*\..*\..*)\.", s).group(1)

Out: 'abc-5.18.0'

答案 1 :(得分:0)

您可以使用限制性正则表达式,例如:

^([^-]+-\d+\.\d+\.\d+)(\..*)?$

您可以通过以下方式在Groovy中应用它并提取值:

import java.util.regex.Pattern

final String str = 'abc-5.18.0.0_10'

final Pattern pattern = Pattern.compile(/^([^-]+-\d+\.\d+\.\d+)(\..*)?$/)

final String result = (str =~ pattern).replaceFirst('$1')

println result

输出:

abc-5.18.0