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

时间:2017-09-25 16:50:42

标签: regex kotlin sequence

  1. 以lineSequence开头
  2. 我想测试正则表达式是否匹配,如果匹配,则获得第一场比赛
  3. 此外,我想从正则表达式匹配中返回一个捕获组
  4. 如果我不在乎,我会做一个"第一次"在lineSequence上,如果它存在,重新运行正则表达式。

    val possibleMatch = input.lineSequence().first { myRegex.matches(it) }
    

    ...但我想成为kotlin-cool而不必重新运行正则表达式。我应该使用映射到MatchGroup并过滤掉空值吗?感觉比它更加冗长......

    input.lineSequence()
    .mapNotNull { myRegex.find(it) }
    .map { it.groupValues[1] }
    .first()
    

1 个答案:

答案 0 :(得分:3)

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

input.lineSequence()
    .mapNotNull { regex.find(it)?.groupValues?.get(1) }
    .first()

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