微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scala:在json中使用Regex过滤器选择Jackson JsonNode键

如何解决Scala:在json中使用Regex过滤器选择Jackson JsonNode键

我有示例 jsonNode 数据 - Inputstr =

{
"a.b.c.d.e":"123","a[0].b.c.d[0].e":"123","a[0].b.c.d[1].e":"123","a[1].b.c.d[0].e":"123","a[1].b.c.d[1].e":"123","d.e.f"="789","x.y.z"="789"
}

我想提取具有格式 a[0-9*].b[0-9*].c[0-9*].d[0-9*].e[0-9] 的数据的键*]。 基本上,输出应该返回我,0 次或多次出现

[ a.b.c.d.e,a[0].b.c.d[0].e,a[0].b.c.d[1].e,a[1].b.c.d[0].e,a[1].b.c.d[1].e ].

所以,我所做的是

val json = ObjectMapper.readTree(Inputstr)
val itr = json.fieldNames

现在在这个键的迭代器上,我想创建一个通用的正则表达式,返回上面的输出

我试过了,但没有用

val regex = """a\[[0-9\]]*.b\[[0-9\]]*.c\[[0-9\]]*.d\[[0-9\]]*.e\[[0-9\]]*""".r
while(itr.hasNext())
{
    val str= itr.next()
    regex.findAllIn(str)
}

我基本上坚持创建可以采用 [0-9]* 的正则表达式,它应该检查大括号 [] 以及大括号内是否存在 0 到 9 的数字。即使不存在,它也应该返回我 a.b.c.d.e。

我希望这是有道理的。 如果有任何问题,请告诉我。

解决方法

a(?:\[\d])?\.b(?:\[\d])?\.c(?:\[\d])?\.d(?:\[\d])?\.e(?:\[\d])?

应该可以完成这项工作,我将 [0] 部分包含在非匹配组中,该组可以使用 ?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。