因此,作为学习语言的一部分,我想检查特定模式的三个字符串,并仅返回该模式的第一个匹配项。
我的尝试是使用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”;我假设我应该能够访问捕获组,但是如何?
答案 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']