求一个正则表达式,想了半天也没写对

iiihavedone 2018-11-12 04:05:54
从一个网站上抓取到很多数据,都是json格式的

{"id":"24137",
"column_id":"214",
"project_id":"1"
},
{"id":"24138",
"column_id":"214"
},
{"id":"24139"
}

数据太多了就简单举个列子,比如一共有三组数据,每组数据的key的数量都不一定,想通过正则筛选出来。
一、含有 "id" "column_id" "project_id" 的数据。
二、这三个key少了哪个都不做选择继续。

即这三组数据 筛选完毕后只剩下 {"id":"24137","column_id":"214","project_id":"1"}这一组。

我的想法是
1.先找到 整篇html中第一个 {"id" 到最后一个 {"id"间的所有数据。
2.再循环匹配 {"id" 到 下一个 {"id" 间的数据
3.获取 id,column_id,project_id的值 少了某一项就continue (到了这里就不会表达了)

求助大神该怎么描述这个正则,或者是不是思路有问题

...全文
61 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
游北亮 2018-11-13
  • 打赏
  • 举报
回复
这个确实不是正则擅长的,虽然能做,但是效率不一定比JSON原生对象好,参考:

\{[^\}]*"id":"\d+"[^\}]*"column_id":"\d+"[^\}]*"project_id":"\d+"[^\}]*\}
但是这个正则要求这3个id的顺序,如果顺序不一定,上面的正则会有问题
iiihavedone 2018-11-12
  • 打赏
  • 举报
回复

引用 2 楼 hanjun0612 的回复:
正则不在行。我这里代码实现



引用 3 楼 starfd 的回复:
json反序列化后判断这3个字段是否都有值不就行了?有着简单的路径,非要通过正则搞事


引用 4 楼 yk810906591 的回复:
string str = "{\"id\":\"24137\",\"column_id\":\"214\",\"project_id\":\"1\"}";
var list = Regex.Matches(str, "{\"id\":\"(?<id>[^\"]+)\",\"column_id\":\"(?<column_id>[^\"]+)\",\"project_id\":\"(?<project_id>[^\"]+)\"}")
.Cast<Match>()
.Select(o=>new
{
id=o.Groups["id"].Value,
column_id=o.Groups["column_id"].Value,
project_id=o.Groups["project_id"].Value
});



迷了迷了,被正则支配了,你们一说我才恍然大悟,谢谢各位
陈渊凯 2018-11-12
  • 打赏
  • 举报
回复
string str = "{\"id\":\"24137\",\"column_id\":\"214\",\"project_id\":\"1\"}";
var list = Regex.Matches(str, "{\"id\":\"(?<id>[^\"]+)\",\"column_id\":\"(?<column_id>[^\"]+)\",\"project_id\":\"(?<project_id>[^\"]+)\"}")
.Cast<Match>()
.Select(o=>new
{
id=o.Groups["id"].Value,
column_id=o.Groups["column_id"].Value,
project_id=o.Groups["project_id"].Value
});
  • 打赏
  • 举报
回复
json反序列化后判断这3个字段是否都有值不就行了?有着简单的路径,非要通过正则搞事
正怒月神 版主 2018-11-12
  • 打赏
  • 举报
回复
正则不在行。我这里代码实现
iiihavedone 2018-11-12
  • 打赏
  • 举报
回复
正则没学好的痛

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧