【问题标题】:How to access a capture group by name?如何按名称访问捕获组?
【发布时间】:2020-01-22 15:03:28
【问题描述】:

假设我有一个MatchResult m

>>> var m = Regex("(?<foo>hello) world").find("hello world")!!

如何按名称访问名为“foo”的组?根据文档MatchGroupCollection 实现了get(String) operator,但如果我尝试它,我会得到一个异常:

>>> m.groups["foo"]
error: type mismatch: inferred type is String but Int was expected
m.groups["foo"]
         ^

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/37088679/…
  • 啊,显然get(String) 只在JVM 和JRE8 上实现。鉴于此,是否有人建议如何在不使用 get 运算符的情况下轻松按名称访问捕获组?

标签: regex kotlin named-captures


【解决方案1】:

MatchNamedGroupCollection 允许通过名称获取,MatchGroupCollection 只允许通过整数索引获取。

所以你需要在通过名称获取匹配之前检查组类型。

类似:(m.groups as MatchNamedGroupCollection)["foo"]

【讨论】:

  • 嗯,抛出异常:java.lang.UnsupportedOperationException: Retrieving groups by name is not supported on this platform.
猜你喜欢
  • 2021-10-29
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多