Groovy在字符之前提取子字符串

时间:2014-11-14 20:03:20

标签: regex string groovy

我有一堆像

这样的字符串
asdf v1.0
jkl v3.04

我的所有字符串都是一组字符,后跟一个空格,然后是'v',然后是一个数字。我想从每个字符串中提取,“v”之前的部分和“v”之前的空格字符,以便:

asdf v1.0 becomes 'asdf'
jkl v3.04 becomes 'jkl'

需要一些帮助。我尝试了takeWhile { it != 'v' },但最终在结果字符串中的'v'之前包含了我不想要的空格。

4 个答案:

答案 0 :(得分:24)

您可以简单地提取子字符串:

input.substring(0, input.lastIndexOf(" v"))

要在v

之后获取该部分
input.substring(input.lastIndexOf(" v") + 2)

答案 1 :(得分:3)

我认为,鉴于所述标准,以下内容将在所选解决方案不会出现的地方给出正确的结果:

String stringParser(String inputString) {
    inputString ? inputString.split(/ v\d/)[0] : ''
}

一些样本测试:

assert stringParser('John Kramer v1.1') == 'John Kramer'
assert stringParser('Kramer v Kramer v9.51') == 'Kramer v Kramer'
assert stringParser('A very hungry caterpillar v2.6') == 'A very hungry caterpillar'

答案 2 :(得分:0)

114855 114859 114873 114977 117389 115326

详情

input[0..(input.lastIndexOf('v') - 1)].trim()

你不必惊讶:我以前是一个非常棒的程序员

答案 3 :(得分:0)

这是一个使用正则表达式的例子

String regex = /(v\d)(\d|\.)*/

def clean = { text ->
   text?.replaceAll(regex,'')?.trim()
}

assert 'v1.11' ==~ regex

assert clean(null) == null
assert clean('asdf v1.0') == 'asdf'
assert clean('jkl v3.04') == 'jkl'
assert clean('John Kramer v1.1') == 'John Kramer'
assert clean('Kramer v Kramer v9.51') == 'Kramer v Kramer'
assert clean('A very hungry caterpillar v2.6') == 'A very hungry caterpillar'

相关问题