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

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

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

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

…但我想成为kotlin酷,不必重新运行正则表达式。 我应该使用地图到MatchGroup并过滤出空位吗? 感觉比它可能更冗长…

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

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

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

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