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

标签 regex kotlin sequence

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

如果我不在乎,我会在 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/

相关文章:

c# - 简单的正则表达式在 c# 中不起作用

r - 生成一个递增的序列,如 112123123412345

java - java中的序列比较

java - 匹配也包含括号的字符串的正则表达式

regex - Bash 正则表达式从数组元素中去除引号

java - Kotlin:从列表中的嵌套集中查找计数(更实用的方法)

java - 如何从 Java 使用 Kotlin 反射

java - 通过 ID 分配两个数组

java - 在子类的 Hibernate 中为每个表指定不同的序列

javascript - 正则表达式内的阶段 - Javascript