我有一个字符串,代表一个版本:
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
我在做什么错?应该是“ /// | \。”吗?
答案 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