Kotlin:如何获取与第一行匹配的捕获组?

Ben*_*n H 2 regex sequence kotlin

  1. 以lineSequence开头
  2. 我想测试一个正则表达式是否匹配,如果匹配,则获得第一个匹配项
  3. 此外,我想从该正则表达式匹配项中返回一个捕获组

如果我不在乎,我会在lineSequence上做一个“ first”,如果存在,请重新运行正则表达式。

val possibleMatch = input.lineSequence().first { myRegex.matches(it) }
Run Code Online (Sandbox Code Playgroud)

...但是我想成为科特林酷派,而不必重新运行正则表达式。我应该使用映射到MatchGroup并过滤出null吗?感觉比以前更冗长...

input.lineSequence()
.mapNotNull { myRegex.find(it) }
.map { it.groupValues[1] }
.first()
Run Code Online (Sandbox Code Playgroud)

hot*_*key 5

您可以将其简化为single .mapNotNull { ... }

input.lineSequence()
    .mapNotNull { regex.find(it)?.groupValues?.get(1) }
    .first()
Run Code Online (Sandbox Code Playgroud)

如果.find(it)返回null,则该值仍将从序列中删除,否则将在同一调用中进行处理。