首页 > 解决方案 > 如何按名称访问捕获组?

问题描述

说我有一个: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"]
         ^

标签: regexkotlinnamed-captures

解决方案


它是MatchNamedGroupCollection允许按名称获取的,MatchGroupCollection唯一允许按整数索引获取的。

因此,您需要在按名称获取匹配项之前检查组类型。

就像是:(m.groups as MatchNamedGroupCollection)["foo"]


推荐阅读