- 从 lineSequence 开始
- 我想测试正则表达式是否匹配,如果匹配,则获取第一个匹配项
- 此外,我想从该正则表达式匹配中返回一个捕获组
如果我不在乎,我会在 lineSequence 上执行“第一个”操作,如果它存在,则重新运行正则表达式。
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
,该值仍将从序列中删除,否则它将在同一个调用中进行处理。
关于regex - Kotlin:如何获取匹配的第一行的捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46410292/