从字符串列表中获取子字符串

时间:2016-10-20 16:44:40

标签: regex groovy

因此,作为学习语言的一部分,我想检查特定模式的三个字符串,并仅返回该模式的第一个匹配项。

我的尝试是使用find和正则表达式的组合来遍历列表:

def date = [
  "some string",
  "some other string 11.11.2000",
  "another one 20.10.1990"
].find { title ->
  title =~ /\d{2}\.\d{2}\.\d{4}/
}

这种作品,将整个字符串留在date

然而,我的目标是在date中结束“11.11.2000”;我假设我应该能够访问捕获组,但是如何?

2 个答案:

答案 0 :(得分:4)

如果要在集合中查找匹配元素时返回特定值(在您的情况下可能是该元素的一部分),则需要使用findResult

您的代码可能看起来像这样

def date = [
  "some string",
  "some other string 11.11.2000",
  "another one 20.10.1990"
].findResult { title ->
  def res = title =~ /\d{2}\.\d{2}\.\d{4}/
  if (res) {
      return res[0]
  }
}

答案 1 :(得分:2)

Extending UnholySheep's answer, you can also do this:

assert [
  "some string",
  "some other string 11.11.2000",
  "another one 20.10.1990"
].findResult { title ->
  def matcher = title =~ /\d{2}\.\d{2}\.\d{4}/
  matcher.find() ? matcher.group() : null
} == '11.11.2000'

For all matches, just use findResults instead of findResult, like this:

assert [
  "some string",
  "some other string 11.11.2000",
  "another one 20.10.1990"
].findResults { title ->
  def matcher = title =~ /\d{2}\.\d{2}\.\d{4}/
  matcher.find() ? matcher.group() : null
} == ['11.11.2000', '20.10.1990']